SIGTERM | Этот сигнал генерируется только вызовом kill() и дает возможность пользователю элегантно прервать процесс. Процесс должен прекратиться насколько возможно быстро, немедленно после получения сигнала. |
SIGTRAP | Когда программа проходит через точку прерывания, этот сигнал посылается процессу. Обычно он перехватывается процессом отладчика, который установил точку прерывания. |
SIGTSTP | Этот сигнал посылается всем процессам в группе процессов переднего плана, когда пользователь нажимает клавиатурную комбинацию прерывания (обычно ^Z). |
SIGTTIN | Этот сигнал посылается фоновому процессу, который пытается осуществить чтение из контролируемого им терминала. Об управлении заданиями подробнее читайте в главе 15. |
SIGTTOU | Этот сигнал посылается фоновому процессу, который пытается осуществить запись на контролируемый им терминал. Об управлении заданиями подробнее читайте в главе 15. |
SIGURG | Этот сигнал посылается, когда по сокету принимается экстренное сообщение. Экстренные данные — тема, касающаяся сетевых технологий, которая выходит за рамки освещаемых в настоящей книге. В [33] это рассматривается более подробно. |
SIGUSR1 | Для этого сигнала нет предопределенного назначения; процессы могут использовать его для собственных нужд. |
SIGUSR2 | Для этого сигнала нет предопределенного назначения; процессы могут использовать его для собственных нужд. |
SIGVTALRM | Отправляется, когда истекает период действия таймера, установленного вызовом settimer() . Информацию о применении таймеров можно найти в главе 18. |
SIGWINCH | Когда окно терминала изменяет размер, например, когда пользователь растягивает окно xterm , все процессы в группе процессов переднего плана получают этот сигнал. В главе 16 представлена информация об определении текущего размера управляющего терминала. |
SIGXCPU | Процесс превысил свой мягкий лимит использования ресурсов процессора. Этот сигнал посылается раз в секунду до тех пор, пока данный процесс не превысит жесткий лимит использования ресурсов процессора. Как только это произойдет, процесс прерывается сигналом SIGKILL . Информацию о лимитах ресурса процессора можно найти в главе 10. |
SIGXFSZ | Когда программа превышает лимит максимального размера файла, ей посылается этот сигнал, что обычно уничтожает процесс. Если сигнал перехвачен, то системный вызов, который послужил причиной превышения лимита на размер файла, возвращает ошибку EFBIG . Информацию о лимитах ресурса процессора можно найти в главе 10. |
12.3.1. Описание сигналов
Иногда приложения нуждаются в описании сигнала для отображения пользователю или помещения в журнал. Существуют три способа сделать это (см. главу 9). К сожалению, ни один из них не стандартизован.
Самый старый метод предусматривает применение sys_siglist
— массива строк, описывающих каждый сигнал, проиндексированного номерами самих сигналов. Он включает описания всех сигналов за исключением сигналов реального времени. Применение sys_siglist
более переносимо, чем прочие методы, описанные ниже. В системах BSD предусмотрена функция psignal ()
, которая является сокращенным способом отображения сообщений. Вот как выглядит версия psignal()
.
#include <signal.h>
#include <stdio.h>
void psignal(int signum, const char *msg) {
printf('%s: %s
', msg, sys_siglist[signum]);
}
Следует отметить, что эта функция использует тот же список сигналов, что и sys_siglist
, поэтому сигналы реального времени также исключаются.
Библиотека GNU С, используемая Linux, предлагает еще один метод — strsignal()
. Эта функция не входит ни в какой стандарт, поэтому для доступа к файлу прототипа нужно определить _GNU_SOURCE
.
#define _GNU_SOURCE
#include <signal.h>