2つのスレッドth1、th2を持つデーモンがあります。 th2はread(2)
を使用してソケットを読み取ります。2つの結果のSIGTERMを処理する
SIGTERM
でデーモンを終了すると、th1が信号を捕捉して処理し(終了フラグを設定します)、デーモンデストラクタが呼び出された後、pthread_kill(th2, SIGTERM)
を呼び出します。しかし、2番目のスレッドはSIGTERM
を受信しないので、ソケットはデータを受信して終了フラグが設定されているので、実行を終了します(read()
から出てきます)。
私がpthread_kill(th2, SIGUSR2)
と、そしてpthread_kill(th2, SIGTERM)
を呼び出すと、すべてが正しく終了します。したがって、UNIXは結果的に同一の信号を送信することはできないようです。
この動作はオペレーティングシステムによって異なりますか?指定されたスレッドが別のスレッドからSIGTERM
を受け取ることを保証できますか?
適切なプログラミング言語のタグ、c、C++、またはyourLanguageHereを含めると、より多くの「目」を得ることができます。がんばろう。 – shellter
ありがとうございました、タグを追加しました。私はUNIXがCを意味すると仮定した) – vissi
@vissi:それは間違っている。あなたはあなたが働いている言語のタグだけを含めるべきです。あなたの質問が相互運用性に関係しない限り、1つの言語にのみタグを付けるべきです。 – Puppy