2013-08-06 2 views
-3

У меня есть назначение написать функцию обработчика сигнала, которая захватывает сигнал SIGKILL и отображает сообщения об ошибках в первые 3 раза, которые он вызывается. В 4-й раз, когда он обрабатывает SIGKILL, он должен установить обработчик сигнала по умолчанию, а затем отправить SIGKILL в свой процесс (который он не поймает).Функция обработчика сигнала захватывает SIGKILL первые 3 раза

Я предполагаю использовать цикл и отображать сообщения об ошибках в первых трех итерациях. Я прав? Мне сложно отправить SIGKILL в свой процесс и установить обработчик на значение по умолчанию (что меня смущает).

Не могли бы вы дать мне советы?

ответ

10

Согласно man 7 signal,

The signals SIGKILL and SIGSTOP cannot be caught, blocked, or ignored. 
5

, что он сказал, это правда, что вы не можете поймать SIGKILL анс SIGSTOP

#include <stdio.h> 
#include <signal.h> 

void funCatch(int signal) 
{ 
    printf("sucessfully caught the kill signal\n"); 
} 

int main(int argc,char **argv) 
{ 
    if(signal(SIGKILL,funCatch)==SIG_ERR) 
    { 
     printf("cannot catch signal\n"); 
    } 
    return 0; 
} 

это пример кода для проверки приведенное выше утверждение.

+1

Использование 'perror' вместо простого' printf' будет показывать, что 'errno' установлен в' EINVAL' («Invalid argument»). 'sigaction' ведет себя аналогично BTW. – stefanct