Как и 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 |
