Сигналы
Процессы могут взаимодействовать, посылая друг другу сигналы. Список сигналов в 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 команда
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 | Вывод на терминала для фонового процесса |
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 |
SIGTHAW | 35 | действия не выполняются | Check point Thaw |
SIGCANCEL | 36 | действия не выполняются | сигнал отмены, зарезервировано библиотекой потоков |
SIGXRES | 37 | действия не выполняются | выход за границу блока управления ресурсом |
SIGRTMIN | * | завершение | первый сигнал реального времени |
(SIGRTMIN+1) | * | завершение | второй сигнал реального времени |
(SIGRTMAX-1) | * | завершение | предпоследний сигнал реального времени |
SIGRTMAX | * | завершение | последний сигнал реального времени |