Jump to content

    
nanorobot

Обработка killall в приложении

Recommended Posts

Получает ли приложение, снимаемое командой killall какое либо извещение о том что оно сейчас будет снято, что бы  можно было предпринять какие то дейставия - освободить динамическую память, закрыть порты и т.д. ?

 

Share this post


Link to post
Share on other sites

killall шлет SIGTERM, его и надо ловить. 

Регистрируете функцию отлова с помощью signal, а дальше на что фантазия способна. Можно некую условную переменную в true ставить, где различные участки кода ее проверяют и корректно завершают свою работу.

http://cppstudio.com/post/1204/

Edited by new123

Share this post


Link to post
Share on other sites

static void sig_handler(int sigio) {
    if (sigio == SIGQUIT) {
        ...
    } else if ((sigio == SIGINT) || (sigio == SIGTERM)) {
        ...
    }
    return;
}
 

int main(int argc, char **argv) {
...
struct sigaction sigact; /* SIGQUIT&SIGINT&SIGTERM signal handling */
/* configure signal handling */
sigemptyset(&sigact.sa_mask);
sigact.sa_flags = 0;
sigact.sa_handler = sig_handler;
sigaction(SIGQUIT, &sigact, NULL); /* Ctrl-\ */
sigaction(SIGINT, &sigact, NULL); /* Ctrl-C */
sigaction(SIGTERM, &sigact, NULL); /* default "kill" command */
...

Share this post


Link to post
Share on other sites

Почитайте man 7 signal и man 3 signal. Пишете обработчик, а в начале main регистрируете при помощи функции signal обработчик нужных сигналов. Вот так, например:

https://github.com/eddyem/eddys_snippets/blob/master/guard.c#L49

Ну и не забывайте, что kill -9 или killall -9 посылает SIGKILL, который не может быть игнорирован.

P.S. Память освобождать не нужно: ядро после смерти приложения это сделает само. Аналогично не нужно закрывать порты. А вот при работе с БД нужно правильно закрыть, чтобы снять блокировку, или уведомить подключенную железяку, что программа сдохла, или освободить область в разделяемой памяти и т.п...

Edited by Eddy_Em

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.