Как и pause()
, sigsuspend()
временно приостанавливает процесс до тех пор, пока не будет получен сигнал (и обработан связанным с ним обработчиком, если таковой предусмотрен), возвращая -1
и устанавливая errno
в EINTR
.
В отличие от pause()
, sigsuspend()
временно устанавливает маску сигналов процесса в значение, находящееся по адресу, указанному в mask
, на период ожидания появления сигнала. Как только сигнал поступает, маска сигналов восстанавливается в то значение, которое она имела до вызова sigsuspend()
. Это позволяет процессу ожидать появления определенного сигнала за счет блокирования всех остальных сигналов[63].
12.3. Доступные сигналы
Linux предоставляет в распоряжение процессов сравнительно немного сигналов, и все они собраны в табл. 12.1.
Таблица 12.1. Сигналы
Сигнал | Описание | Действие по умолчанию |
---|---|---|
SIGABRT | Доставляется вызовом abort() . | Прервать, сбросить дамп |
SIGALRM | Истек срок действия alarm() . | Прервать |
SIGBUS | Ошибка, зависящая от оборудования. | Прервать, сбросить дамп |
SIGCHLD | Дочерний процесс прерван. | Игнорировать |
SIGCONT | Выполнение процесса продолжается после приостановки. | Игнорировать |
SIGFPE | Арифметическая ошибка. | Прервать, сбросить дамп |
SIGHUP | Закрыт процесс, управляющий терминалом. | Прервать |
SIGILL | Обнаружена недопустимая инструкция. | Прервать |
SIGINT | Пользователь послал символ прерывания (^C). | Прервать |
SIGIO | Принят асинхронный ввод-вывод. | Прервать |
SIGKILL | Не перехватываемое прерывание процесса. | Прервать |
SIGPIPE | Процесс пишет в канал при отсутствии читателя. | Прервать |
SIGPROF | Закончился сегмент профилирования. | Прервать |
SIGPWR | Обнаружен сбой питания. | Прервать |
SIGQUIT |