Пример обработки сигналов линукс си

исходник взят отсюда

В следующем пример мы сделаем две вещи =

  1. назначим процессу обработчик для сигнала SIGTERM (функция term_handler() )
  2. заблокируем сигнал SIGHUP, так что этот сигнал не может завершить наш процесс

Код и комментарии=

#include stdio.h>
#include stdlib.h>
#include signal.h>
void term_handler(int i) // функция-обработчик сигнала
{ 
  printf ("Terminating\n");
  exit(EXIT_SUCCESS);
}
int main(int argc, char ** argv) 
{
	struct sigaction sa; /* спец. структура используемая в качестве параметра системного вызова sigaction() */
	sigset_t newset; // набор сигналов
	sigemptyset(&newset); // инициализирует набор сигналов, указанный в newset, и "очищает" его от всех сигналов
	sigaddset(&newset, SIGHUP); // добавляем сигнал SIGHUP в наш набор  
	sigprocmask(SIG_BLOCK, &newset, 0); // добавляем набор newset в группу заблокированных 
	sa.sa_handler = term_handler; // добавляем в структуру типа  sigaction указатель на функцию обработчик сигнала
	sigaction(SIGTERM, &sa, 0); /* этим вызовом с учётом всех предыдущих действий 
	                мы назначили нашему процессу обработчик term_handler на случай получения сигнала SIGTERM
					- т.е. сигнала "предложения завершиться"*/
	
	printf("My pid is %i\n", getpid()); // выводим pid процесса
	printf("Waiting...\n");
	
	while(1) sleep(1); // бесконечный цикл с задержкой на одну секунду силлисекунду на каждый виток
	
	return EXIT_FAILURE;
}

В данном примере использовались =

_____________________________________________
Источники(читать подробнее)=
http://citforum.ru/programming/unix/sign...
http://www.opennet.ru/man.shtml?topic=si...
http://www.gnu.org/software/libc/manual/...
Ключевые слова и фразы(для поиска)=
Пример обработчика сигналов линукс си