Имя сигнала |
Описание |
SIGALRM |
Генерируется таймером, установленным функцией alarm |
SIGHUP |
Посылается управляющему процессу отключающимся терминалом или управляющим процессом во время завершения каждому процессу с высоким приоритетом |
SIGINT |
Обычно возбуждается с терминала при нажатии комбинации клавиш + или сконфигурированного символа прерывания |
SIGKILL |
Обычно используется из командной оболочки для принудительного завершения процесса с ошибкой, т.к. этот сигнал не может быть перехвачен или проигнорирован |
SIGPIPE |
Генерируется при попытке записи в канал при отсутствии связанного с ним считывателя |
SIGTERM |
Отправляется процессу как требование завершиться. Применяется UNIX при выключении для запроса остановки системных сервисов. Это сигнал, по умолчанию посылаемый командой kill |
SIGUSR1 , SIGUSR2 |
Может использоваться процессами для взаимодействия друг с другом, возможно, чтобы заставить их сообщить информацию о состоянии |
По умолчанию сигналы, перечисленные в табл. 11.8, также вызывают преждевременное завершение. Кроме того, могут выполняться действия, зависящие от реализации, например, создание файла core.
Таблица 11.8
Имя сигнала |
Описание |
SIGFPE |
Генерируется исключительной ситуацией во время операций с плавающей точкой |
SIGILL |
Процессор выполнил недопустимую команду. Обычно возбуждается испорченной программой или некорректным модулем совместно используемой памяти |
SIGQUIT |
Обычно возбуждается с терминала при нажатии комбинации клавиш +<\> или сконфигурированного символа завершения (quit) |
SIGSEGV |
Нарушение сегментации, обычно возбуждается при чтении из некорректного участка памяти или записи в него, а также выход за границы массива или разыменование неверного указателя. Перезапись локального массива и повреждение стека могут вызвать сигнал SIGSEGV при возврате функции по неверному адресу |
При получении одного из сигналов, приведенных в табл. 11.9, по умолчанию процесс приостанавливается.
Таблица 11.9
Имя сигнала |
Описание |
SIGSTOP |
Останавливает выполнение (не может быть захвачен или проигнорирован) |
SIGTSTP |
Сигнал останова терминала часто возбуждается нажатием комбинации клавиш + |
SIGTTIN , SIGTTOU |
Применяются командной оболочкой для обозначения того, что фоновые задания остановлены, т.к. им необходимо прочесть данные с терминала или выполнить вывод |
Сигнал SIGCONT
возобновляет остановленный процесс и игнорируется при получении неостановленным процессом. Сигнал SIGCHLD
по умолчанию игнорируется (табл. 11.10).
Таблица 11.10
Имя сигнала |
Описание |
SIGCONT |
Продолжает выполнение, если процесс остановлен |
SIGCHLD |
Возбуждается, когда останавливается или завершается дочерний процесс |
В этой главе вы убедились, что процессы — это основной компонент операционной системы Linux. Вы узнали, как они могут запускаться, завершаться и просматриваться и как вы можете применять их для решения задач программирования. Вы также познакомились с сигналами, которые могут использоваться для управления действиями выполняющихся программ. Вы убедились, что все процессы Linux, вплоть до init
включительно, используют одни и те же системные вызовы, доступные любому программисту.
В главе 11 вы видели, как обрабатываются процессы в ОС Linux (и конечно в UNIX). Эти средства обработки множественных процессов долгое время были характерной чертой UNIX-подобных операционных систем. Порой бывает полезно заставить одну программу делать два дела одновременно или, по крайней мере, создать впечатление такой работы. А может быть, вы хотите, чтобы несколько событий произошло одновременно и все они были тесно связаны, но при этом накладные расходы на создание нового процесса с помощью функции fork
считаете слишком большими. В таких ситуациях можно применить потоки, позволяющие одному процессу стать многозадачным.
В этой главе мы рассмотрим следующие темы:
Читать дальше