th1、th2の2つのスレッドを持つデーモンがあります。th2は、を使用してソケットを読み取りますread(2)
。
でデーモンを強制終了するとSIGTERM
、th1はシグナルをキャッチして処理し(終了フラグを設定します)、その後、デーモンデストラクタが呼び出され、を呼び出しますpthread_kill(th2, SIGTERM)
。ただし、2番目のスレッドはを受信しないため、強制終了SIGTERM
されません(ソケットがデータを受信してから抜けるとread()
、終了フラグが設定されているため、実行が終了します)。
を呼び出しpthread_kill(th2, SIGUSR2)
てから、を呼び出すとpthread_kill(th2, SIGTERM)
、すべてが正しく終了します。したがって、UNIXは結果的に同一の信号を送信することを許可していないようです。
この動作はオペレーティングシステムに依存しますか?SIGTERM
指定されたスレッドが別のスレッドから受信することを確認できますか?