2013-06-06 6 views
0

Я хочу обнаружить сигнал kill моей программы inorder для выполнения некоторой инструкции C перед выходом из моей программы. моя программа работает на linuxКак обнаружить убийство моего процесса?

Можно ли это сделать? Если да, то как я могу это сделать?

ответ

5

Вы можете зарегистрировать signal handler, используя sigaction(). Обратите внимание, что вы не можете обрабатывать SIGKILL или SIGSTOP.

+0

Хотя это совершенно правильно, что дает ссылку, как ответ был , Подумал я, нахмурившись на этом форуме. –

+0

@jimmcnamara: Мой ответ чуть-чуть больше, чем просто ссылка;) (я не могу беспокоиться о написании всего фрагмента кода, если только OP явно не просит об этом ...) –

-1

Если SIGKILL или SIGTERM отправлены в ваш процесс, вы не можете замаскировать или проигнорировать сигнал. Другие сигналы, которые вы можете обрабатывать и замаскировать.

+1

моя цель - не игнорировать kill сигнал, моя цель состоит в том, чтобы выполнить некоторые функции C перед выходом из моей программы. – MOHAMED

+0

Вы можете очень хорошо сделать это, если вы напишите обработчик сигнала. Но для SIGKILL и SIGTERM вы не можете использовать эту логику – Raghuram

+2

'SIGTERM' можно поймать. – Cairnarvon

1

Нет, SIGKILL не могут быть обработаны, может быть, вы хотите, чтобы поймать CTRL + C, затем:

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

volatile sig_atomic_t stop; 

void 
inthand(int signum) 
{ 
    stop = 1; 
} 

int 
main(int argc, char **argv) 
{ 
    signal(SIGINT, inthand); 

    while (!stop) 
     printf("a"); 

    printf("exiting safely\n"); 

    return 0; 
} 

будет делать трюк

+1

Пожалуйста, не используйте 'signal'; он неспособен и, возможно, устарел. 'sigaction' обеспечивает более чистый способ обработки сигналов. – Cairnarvon

+1

+1 для использования флажка 'volatile sig_atomic_t'. –

Смежные вопросы