質問: スレッドでのシグナルの使用について linux初心者なので、困っています。助けてください。 スレッドが複数登録してある状態で、特定のスレッドのみでシグナルを受信したいのですが、可能でしょうか? また、使用する際の注意点なども教えて頂けたらお願いします。
回答: pthread でしょうか?以下 pthread を仮定して。 可能です。 一般にあるプロセスにシグナルが配送されると、どのスレッドでそのシグナルのハンドラが実行されるかは、明示的に指定しない限り、分かりません。つまり os の都合で決められた適当なスレッドでハンドラが実行されます。 これを避けるには、pthread_sigmask() で全てのスレッドのシグナルマスクを適切に設定する必要があります。具体的には、シグナルを受けたくないスレッドではそのシグナルを無視するようにし、そうでないスレッドではそのシグナルを無視しないようにします。 特に注意点はないと思いますが、一点だけ、sigprocmask() でプロセス全体のシグナルマスクが設定できますので、もしこれを使っているようでしたら、矛盾のないようにしないといけませんね。 私も最初、この仕様を知った時には「面倒でセンス悪」と思ったのですが、よく考えるとこういう仕様にしかなり得ないので、仕方がないようです。