Организация UNIX-систем и ОС Solaris

       

Сигналы


Процессы могут взаимодействовать, посылая друг другу сигналы. Список сигналов в Solaris ограничен сорока двумя сигналами, из которых наиболее употребительны сигналы TERM, KILL и HUP. В разных вариантах UNIX может быть разное количество сигналов, стандарт POSIX 1.1 определяет тридцать один сигнал. Каждый сигнал имеет свое мнемоническое обозначение и номер. В разных системах мнемонические обозначения остаются одинаковыми, а номер может быть разным.

Обычный процесс может послать сигнал только тому процессу, который имеет такой же эффективный идентификатор владельца, т.е. запущен тем же пользователем. Процесс, работающий от имени root, может послать любой сигнал любому процессу в системе.

С помощью команды

kill

можно послать сигнал с номером номер_сигнала процессу с идентификатором PID:

kill -номер_сигнала PID

В некоторых системах UNIX есть возможность послать сигнал процессу с определенным именем посредством программы killall:

killall -номер_сигнала имя_процесса

В Solaris эта программа имеет другое значение, а именно выполняет отправку сигнала завершения всем активным процессам:

killall

А отправить сигнал процессам с определенным именем в Solaris следует командой pkill:

pkill sendmail

С помощью pkill можно отправлять сигнал завершения TERM процессу с тем или иным признаком, так что отправка сигнала процессу с определенным именем - не единственное умение pkill. Например,

pkill -HUP -G other,daemon

отправит сигнал HUP (SIGHUP) всем процессам, чья фактическая группа - other или daemon.

В табл. 7.2 приведен список сигналов, определенный стандартом POSIX 1.1, а в табл. 7.3 - список сигналов, определенных в Solaris 9.

Кроме команды pkill системный администратор может найти удобной команду pgrep, которая заменяет конструкцию

ps -ef | grep команда

В Solaris для получения того же результата можно ввести более короткую команду

pgrep команда

Таблица 7.2. Сигналы POSIX 1.1

СигналНомерЗначение
SIGHUP 1 Разрыв связи с управляющим терминалом или управляющим процессом
SIGINT 2 Прерывание с клавиатуры
SIGQUIT 3 Сигнал выхода дан с клавиатуры
SIGILL 4 Недопустимая инструкция
SIGABRT 6 Сигнал abort получен от вызванной кем-то функции abort
SIGFPE 8 exception: ошибка вычислений с плавающей запятой
SIGKILL 9 Безусловное завершение процесса
SIGSEGV 11 Неверный адрес памяти
SIGPIPE 13 Запись в несуществующий канал
SIGALRM 14 Сигнал timer от функции alarm
SIGTERM 15 Завершение
SIGUSR1 30,10,161)Определяется пользователем
SIGUSR2 31,12,17 Определяется пользователем
SIGCHLD2 20,17,18 Дочерний процесс остановлен или принудительно завершен
SIGCONT1 19,18,25 Продолжить выполнение, если оно было остановлено
SIGSTOP 17,19,23 Остановить процесс
SIGTSTP 18,20,24 Останов введен с терминала
SIGTTIN 21,21,26 Ввод с терминала для фонового процесса
SIGTTOU 22,22,27 Вывод на терминала для фонового процесса

Таблица 7.3. Сигналы Solaris 9

НазваниеЗнач.Действие поСобытие
SIGHUP 1 завершение разрыв связи с терминалом
SIGINT 2 завершение прерывание
SIGQUIT 3 аварийное завершение (core) Quit (требование завершения)
SIGILL 4 аварийное завершение (core) недопустимая команда процессора
SIGTRAP 5 аварийное завершение (core) прерывание при трассировке или точка останова
SIGABRT 6 аварийное завершение (core) аварийное принудительное завершение
SIGEMT 7 аварийное завершение (core) прерывание эмуляции
SIGFPE 8 аварийное завершение (core) arithmetic exception: ошибка вычислений с плавающей запятой
SIGKILL 9 безусловное завершение требование безусловного завершения
SIGBUS 10 аварийное завершение (core) ошибка шины
SIGSEGV 11 аварийное завершение (core) ошибка сегментации (выход за пределы выделенной памяти)
SIGSYS 12 аварийное завершение (core) неверный системный вызов
SIGPIPE 13 завершение запись в несуществующий канал
SIGALRM 14 завершение Сигнал timer от функции alarm
SIGTERM 15 завершение завершение
SIGUSR1 16 завершение программируемый сигнал 1
SIGUSR2 17 завершение программируемый сигнал 2
SIGCHLD 18 действия не выполняются изменение статуса дочернего процесса
SIGPWR 19 действия не выполняются сбой питания или перезагрузка
SIGWINCH 20 действия не выполняются изменение размера окна
SIGURG 21 действия не выполняются состояние сокета (Urgent Socket Condition)
SIGPOLL 22 завершение Pollable Event (см. streamio (7I))
SIGSTOP 23 остановка требование остановки
SIGTSTP 24 остановка остановка ввода с терминала
SIGCONT 25 действия не выполняются требование продолжения
SIGTTIN 26 остановка ввода ввод с терминала для фонового процесса
SIGTTOU 27 остановка вывода вывод на терминал для фонового процесса
SIGVTALRM 28 завершение Virtual Timer Expired
SIGPROF 29 завершение Profiling Timer Expired
SIGXCPU 30 аварийное завершение (core) достижение лимита времени использования процессора (CPU time limit exceeded)
SIGXFSZ 31 аварийное завершение (core) превышение допустимого размера файла – getrlimit (см. getrlimit (2))
SIGWAITING 32 действия не выполняются зарезервировано библиотекой потоков
SIGLWP 33 действия не выполняются межпроцессный (LWP) сигнал – зарезервировано библиотекой потоков
SIGFREEZE 34 действия не выполняются Check point Freeze
SIGTHAW35 действия не выполняются Check point Thaw
SIGCANCEL 36 действия не выполняются сигнал отмены, зарезервировано библиотекой потоков
SIGXRES 37 действия не выполняются выход за границу блока управления ресурсом
SIGRTMIN * завершение первый сигнал реального времени
(SIGRTMIN+1) * завершение второй сигнал реального времени
(SIGRTMAX-1) * завершение предпоследний сигнал реального времени
SIGRTMAX* завершение последний сигнал реального времени



Содержание раздела