Попытка игнорировать SIGTERM не удалась в Linux, процесс все еще не завершен

Я столкнулся с одной проблемой обработки сигналов в Linux, моя цель - позволить процессу игнорировать сигнал SIGTERM. Но иногда, процесс все еще завершается, вероятность этой проблемы будет 1/60.

Поддельный код моего приложения:

static int g_count_sig_old = 0;

static volatile int g_count_sig = 0;

void _signalhandler(){

   g_count_sig ++;

   printf(...); // Maybe not safe, just for debugging

   myTrace(...); // Write log to file1 is not signal safe, but just for debugging.

}

main(){

  sigaction(...) // Register signal handler for SIGTERM

  while(1){

    sleep(1000);  // wait one second

    myNewTrace(...); // Output value of g_count_sig to file2

    if( g_count_sig != g_count_sig_old ) {

       g_count_sig_old = g_count_sig;

       printf(...); // output value of g_count_sig

       myNewTrace(...); // Output value of g_count_sig to file2 
    } 

  }  
}

Я полагаю, что это приложение не будет завершено при получении сигнала SIGTERM, но фактический результат тестирования не соответствовал моему проекту. Иногда процесс все еще завершается после получения сигнала SIGTERM. И я подтверждаю, что процесс получил сигнал SIGTERM, когда возникла проблема, я могу наблюдать за выводом консоли и файлом трассировки.

Поэтому я чувствую себя озадаченным, почему это приложение закрывается, даже если игнорируется SIGTERM? Я не уверен, как определить причину этой проблемы, или это разумный симптом в Linux.

Надеюсь получить вашу помощь. Спасибо!

0 ответов

Другие вопросы по тегам