すべての信号が無視されるとどうなりますか?

すべての信号が無視されるとどうなりますか?

私が知っている限り、いくつかの信号はプロセスを停止/継続し、終了/終了するために使用されます。すべての信号を無視するようにプロセスに指示するとどうなりますか?ゾンビでしょうか、それとも殺せない存在でしょうか?

答え1

一部の信号は無視できません。 SIGKILLは常に反応する機会を与えずにプロセスを終了します。 SIGSTOPは常に反応する機会を与えずにプロセスを一時停止します。一部のUnixバリアントは、無視または処理できない他の信号を提供する可能性があります。 Linuxには標準のKILLとSTOPのみがあります。

プロセスがSIGKILLで生き残ることができる唯一の方法は、現在中断できないシステムコール状態にある場合です。プロセスはコードを実行できなくなりますが、システムコールが完了するか、中断可能なポイントに達するまで保持されます。これは一般的に観察するには短すぎますが、Dドライバの欠陥、ハードウェアの欠陥、または時にはネットワークファイルシステムを使用している(状態の遅いプロセス)ことがわかります。「kill -9」が動作しない場合はどうなりますか?

殺すことができないプロセスは「ゾンビ」ではありません。すでに実際に存在する「ゾンビプロセス」という用語は、デッドプロセスに対応するプロセステーブルエントリを意味する。バラよりLinuxでゾンビプロセスを処理する方法

答え2

まず、ゾンビは、プロセスがPIDを除くすべてのリソースを解放し、最終的に収穫、すなわち完全に解放されるのを待っている状態です。

カーネルプロセスにはTask_Interruptible状態があります。これは、転送された信号に応答しないことを意味します。

したがって、最終的に質問に対するプロセス管理信号を避けるためにすべての信号をマスクすると、その信号はそれ自体を維持し、必要に応じて管理できません。これにより、システムが過負荷になる可能性があります。

関連情報