Linux でのシグナル処理の問題に 1 つ遭遇しました。私の目標は、プロセスに 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 での妥当な症状です。
あなたの助けを得ることを願っています。ありがとう!