2012-04-11 6 views
1

私はシグナルハンドラを実装しようとしています。 各pthreadは結合可能に作成され、sigprocmaskを使用してすべてのシグナルでブロックされます。"join"を待っているpthreadを通知するときにプロセスが終了しました

私が呼ばれるのpthreadは、信号が送信された時点でpthread_joinを上待っている場合、全体proccessがimmidiately終了し

pthread_kill(_threads[threadIndex], SIGHALT); 

を使用して、スレッドに別のスレッドからの信号を送信するときに問題が発生します。ただし、スレッドが結合で待機していない場合、スレッドは期待どおりにシグナルを無視します。なぜそれが起こり、どのように変更するのでしょうか?

ありがとうございました!メソッドのmanページからこの抜粋を参照してください。mutithreaded環境でのsigprocmask()の使用に関して

+1

プロセスが終了したか、エラーコードを返す 'pthread_join'が実行され、プログラムの実行が終了しますか? – vhallac

+1

'SIGHALT'について知っている人はいますか?それを見たことはありません。 'SIGSTOP'と同じですか? –

+0

@Pavan Manjunath:恐らくSIGSTOPのドイツ語版ですか? ;-) – alk

答えて

0

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


私はSIGHALTについて少しわからないんだけど、それはpthread_kill()のmanページから、次の関心があるかもしれないSIGSTOPに同義語だと仮定すると:

信号の処分は、プロセス全体にわたるですシグナルハンドラが である場合、ハンドラはスレッドスレッドで呼び出されますが、 シグナルの処理が「停止」、「継続」、または「終了」の場合、 この処理はプロセス全体に影響します。

+0

ドイツ人でさえ、 'SIGSTOP'シグナルを無視することができます:)しかしOPは、スレッドがシグナルをうまく無視する状況を引用しています。だから私は 'SIGHALT'は' SIGSTOP'ではないと思います –

関連する問題