1

シグナルハンドラを実装しようとしています。各 pthread は結合可能に作成され、sigprocmask を使用するすべてのシグナルでブロックされます。

この問題は、スレッドに別のスレッドからシグナルを送信するときに発生します。

pthread_kill(_threads[threadIndex], SIGHALT);

シグナルが送信された時点で、呼び出された pthread が pthread_join で待機している場合、プロセス全体が即時に終了します。ただし、スレッドが結合を待機していない場合は、期待どおりにシグナルを無視します。なぜそれが起こるのか、それを変更する方法はありますか?

ありがとうございました!

4

1 に答える 1

0

マルチスレッド環境での使用についてはsigprocmask()、メソッドのマニュアルページからの抜粋を参照してください。

sigprocmask()の使用は、マルチスレッドプロセスでは指定されていません。pthread_sigmask(3)を参照してください。


については少しわかりませんが、のマニュアルページの次SIGHALTの同義語であると仮定すると、興味深いかもしれません。SIGSTOPpthread_kill()

シグナル処理はプロセス全体です。シグナルハンドラーがインストールされている場合、ハンドラーはスレッドスレッドで呼び出されますが、シグナルの処理が「停止」、「続行」、または「終了」の場合、このアクションはプロセス全体。

于 2012-04-11T11:24:05.337 に答える