Пример обработки сигналов линукс си
Primary tabs
Forums:
исходник взят отсюда
В следующем пример мы сделаем две вещи =
- назначим процессу обработчик для сигнала SIGTERM (функция term_handler() )
- заблокируем сигнал 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; }
В данном примере использовались =
- системный вызов sigaction
- набор сигналов sigset_t
- sigemptyset () + sigaddset() +
- Сигнал SIGHUP
- Сигнал SIGTERM (номер 15) вызывает «вежливое» завершение программы. Получив этот сигнал, программа может выполнить необходимые перед завершением операции (например, высвободить занятые ресурсы). Получение SIGTERM свидетельствует не об ошибке в программе, а о желании ОС или пользователя завершить ее.
- системный вызов sigprocmask()
_____________________________________________
Источники(читать подробнее)=
http://citforum.ru/programming/unix/sign...
http://www.opennet.ru/man.shtml?topic=si...
http://www.gnu.org/software/libc/manual/...
Ключевые слова и фразы(для поиска)=
Пример обработчика сигналов линукс си
- Log in to post comments
- 10837 reads