Троан Эрик В.
Шрифт:
3. Перехватить сигнал, установить флаг, обозначающий, что сигнал получен, и каким-то образом обеспечить выход из блокирующего системного вызова (в данном случае
Поскольку последний вариант выглядит намного чище и легче остальных, оригинальная реализация сигналов заставляет медленные системные вызовы возвратить
Медленные системные вызовы требуют неопределенного времени для своего завершения. Системные вызовы, которые для завершения своей работы ожидают непредсказуемых ресурсов, таких как другие процессы, сетевые данные либо действия со стороны человека, рассматриваются как медленные. Семейство системных вызовов
58
Разница между быстрыми и медленными файлами та же, что и между быстрыми и медленными системными вызовами, и она обсуждается в главе 11.
Обязанностью процесса является обработка
Чтобы "упростить" ситуацию, 4.2BSD автоматически перезапускает такие системные вызовы (особенно
12.2. Программный интерфейс сигналов Linux и POSIX
12.2.1. Посылка сигналов
Посылка сигналов от одного процесса другому обычно осуществляется с помощью системного вызова
Существуют два отличия между
Функция
59
Имеются и другие отличия между этими вызовами; они касаются многопоточных программ, которые в настоящей книге не рассматриваются.
Функция
12.2.2. Использование
Большинство функций сигналов POSIX принимают набор сигналов в качестве одного из своих параметров (или части одного из параметров). Тип данных
60
В действительности она отправляет сигнал текущему потоку текущего процесса.
int sigemptyset(sigset_t *set); | Делает пустым набор сигналов, на который указывает set (никаких сигналов в set представлено не будет). |
int sigfillset(sigset_t *set); | Включает все доступные сигналы в set . |
int sigaddset(sigset_t *set, int signum); | Добавляет сигнал signum в набор set . |
int sigdelset(sigset_t *set, int signum); | Удаляет сигнал signum из набора set . |
int sigismember(const sigset_t *set, int signum); | Возвращает не 0, если сигнал signum содержится в set . В противном случае возвращает 0. |
Единственной причиной возврата ошибки любой из этих функций может быть то, что параметр
12.2.3. Перехват сигналов
Вместо использования функции