0

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 での妥当な症状です。

あなたの助けを得ることを願っています。ありがとう!

4

0 に答える 0