我在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下的合理症状。
希望得到你的帮助。谢谢!