Изчакване на сигнали
#include<signal.h>
int sigwait(const sifset_t *set, int *sig);
Функцията sigwait() спира изпълнението на извикващата нишка, изчаквайки един от сигналите да стане текущ. Функцията приема сигнала (премахва го от чакащия списък със сигнали) и връща номера на сигнала в sig. При успех sigwait() връща 0, при грешка връща положително число, номер на грешката.
Пример за изчакване на сигнал
Дефинирайте функцията за обработка на сигнали SIGTERM. Иницирайте сигнал, като само SIGHUP е включен и блокирайте обработката на сигнали. Задайте обработчик на събития за SIGTERM. Отпечатайте идентификатора на процеса (pid). Изчакайте входящ сигнал SIGHUP и изведете подходящо съобщение. Ако възникне грешка преустановете програмата.
waitsignal.c
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <unistd.h>
void term_handler(int i) {
printf ("Terminating\n");
exit(EXIT_SUCCESS);
}
int main(int argc, char ** argv) {
int sig;
struct sigaction sa;
sigset_t newset;
sigemptyset(&newset);
sigaddset(&newset, SIGHUP);
sigprocmask(SIG_BLOCK, &newset, 0);
sa.sa_handler = term_handler;
sigaction(SIGTERM, &sa, 0);
printf("My pid is %i\n", getpid());
printf("Waiting...\n");
while(!sigwait(&newset, &sig)) printf("SIGHUP recieved\n");
return EXIT_FAILURE;
}