试图忽略SIGTERM在Linux下失败,进程仍然退出

时间:2016-01-15 05:11:05

标签: c++ linux multithreading signals sigterm

我在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 个答案:

没有答案