Пример обработки сигналов линукс си
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/signals/
http://www.opennet.ru/man.shtml?topic=sigaction&category=2&russian=0
http://www.gnu.org/software/libc/manual/html_node/Process-Signal-Mask.html
Ключевые слова и фразы(для поиска)=
Пример обработчика сигналов линукс си
- Log in to post comments
- 11350 reads