1. ホーム
  2. c

[解決済み] Linuxにおける複数スレッドでの信号処理

2022-06-14 16:55:22

質問

Linuxでは、プログラム(複数のスレッドを持つ可能性がある)がSIGTERMやSIGHUPのようなシグナルを受信するとどうなるのでしょうか?

どのスレッドがシグナルを傍受するのでしょうか?複数のスレッドが同じシグナルを受け取ることができますか?シグナルを処理することだけに特化した特別なスレッドがあるのでしょうか?そうでない場合、シグナルを処理するスレッドの内部では何が起こっているのでしょうか?シグナルハンドラ・ルーチンが終了した後、実行はどのように再開されるのでしょうか?

どのように解決するのですか?

これは、使用している Linux カーネルのバージョンによって若干のニュアンスが異なります。

2.6 posix スレッドを仮定し、OS が SIGTERM または SIGHUP を送信することについて話している場合、シグナルはプロセスに送信され、ルートスレッドが受信して処理されます。POSIXスレッドを使用して、同様に個々のスレッドにSIGTERMを送信することもできますが、OSがプロセスにシグナルを送信するときに何が起こるかについて尋ねているのだと思います。

2.6 では、SIGTERM は子スレッドを "cleanly" に終了させますが、2.4 では子スレッドは不確定な状態で残されていました。