ВУЗ:
Составители:
27
Функция kill посылает сигнал SIGNUM процессу или группе процессов,
задаваемому PID. PID может принимать следующие значения:
> 0 сигнал посылается процессу, идентификатор которого равен PID;
== 0 сигнал посылается всем процессам, которые находятся в той же группе
процессов, что и процесс-отправитель;
< -1 сигнал посылается группе процессов, идентификатор которой равен PID;
== -1 если процесс является привилегированным, то сигнал посылается всем
процессам, кроме некоторых системных процессов. Иначе, сигнал
посылается всем процессам, владельцем которых является текущий
пользователь.
Если сигнал успешно послан, то kill возвращает 0, иначе сигнал не посылается
и функция возвращает –1. В случае неудачи в переменной errno возвращаются
следующие коды:
EINVAL аргумент SIGNUM содержит неправильный номер сигнала;
EPERM отсутствуют привилегии на посылку сигнала процессу или группе
процессов;
ESCRH аргумент PID не соответствует ни одному из существующих процессов
или групп процессов.
Процесс может послать сигнал самому себе с помощью вызова kill(getpid(),
SIG), что равнозначно raise(SIG).
Блокирование сигналов
Блокирование сигналов может быть полезно в следующих случаях:
• временное блокирование сигналов дает способ избавиться от прерываний во
время выполнения критичной части программы;
• для того, чтобы сделать программе надежнее, можно заблокировать сигналы
на время модификации данных;
• единственный способ проверки появления сигнала – его блокировка.
Все функции блокировки сигналов используют структуру данных
sigset_t, называемую “набором сигналов”, для указания какие
сигналы будут заблокированы.
Для задания множества сигналов используются следующие
функции. В целях безопасности для работы со структурой sigset_t
рекомендуется использовать только описываемые функции.
int sigemptyset(sigset_t *SET)
Функция исключает из множества заблокированных все
определенные сигналы. Всегда возвращает 0.
int sigfullset(sigset_t *SET)
Функция включает во множество заблокированных все
определенные сигналы. Всегда возвращает 0.
int sigaddset(sigset_t *SET, int SIGNUM)
Функция добавляет сигнал SIGNUM в набор сигналов SET.
Возвращает 0 в случае успешного выполнения и –1 в случае
ошибки. При возникновении ошибки переменная errno может
принимать следующее значение:
EINVAL SIGNUM содержит неправильный номер сигнала.
int sigdelset(sigset_t *SET)
Функция удаляет сигнал SIGNUM из набора сигналов SET. Возвращаемые
значения такие же, как и для функции sigaddset.
int sigismember(const sigset_t *SET, int SIGNUM)
Функция kill посылает сигнал SIGNUM процессу или группе процессов,
задаваемому PID. PID может принимать следующие значения:
>0 сигнал посылается процессу, идентификатор которого равен PID;
== 0 сигнал посылается всем процессам, которые находятся в той же группе
процессов, что и процесс-отправитель;
< -1 сигнал посылается группе процессов, идентификатор которой равен PID;
== -1 если процесс является привилегированным, то сигнал посылается всем
процессам, кроме некоторых системных процессов. Иначе, сигнал
посылается всем процессам, владельцем которых является текущий
пользователь.
Если сигнал успешно послан, то kill возвращает 0, иначе сигнал не посылается
и функция возвращает –1. В случае неудачи в переменной errno возвращаются
следующие коды:
EINVAL аргумент SIGNUM содержит неправильный номер сигнала;
EPERM отсутствуют привилегии на посылку сигнала процессу или группе
процессов;
ESCRH аргумент PID не соответствует ни одному из существующих процессов
или групп процессов.
Процесс может послать сигнал самому себе с помощью вызова kill(getpid(),
SIG), что равнозначно raise(SIG).
Блокирование сигналов
Блокирование сигналов может быть полезно в следующих случаях:
• временное блокирование сигналов дает способ избавиться от прерываний во
время выполнения критичной части программы;
• для того, чтобы сделать программе надежнее, можно заблокировать сигналы
на время модификации данных;
• единственный способ проверки появления сигнала – его блокировка.
Все функции блокировки сигналов используют структуру данных
sigset_t, называемую “набором сигналов”, для указания какие
сигналы будут заблокированы.
Для задания множества сигналов используются следующие
функции. В целях безопасности для работы со структурой sigset_t
рекомендуется использовать только описываемые функции.
int sigemptyset(sigset_t *SET)
Функция исключает из множества заблокированных все
определенные сигналы. Всегда возвращает 0.
int sigfullset(sigset_t *SET)
Функция включает во множество заблокированных все
определенные сигналы. Всегда возвращает 0.
int sigaddset(sigset_t *SET, int SIGNUM)
Функция добавляет сигнал SIGNUM в набор сигналов SET.
Возвращает 0 в случае успешного выполнения и –1 в случае
ошибки. При возникновении ошибки переменная errno может
принимать следующее значение:
EINVAL SIGNUM содержит неправильный номер сигнала.
int sigdelset(sigset_t *SET)
Функция удаляет сигнал SIGNUM из набора сигналов SET. Возвращаемые
значения такие же, как и для функции sigaddset.
int sigismember(const sigset_t *SET, int SIGNUM)
27
Страницы
- « первая
- ‹ предыдущая
- …
- 25
- 26
- 27
- 28
- 29
- …
- следующая ›
- последняя »
