2011-12-22 30 views
2

シグナルSIGKILLをブロックしていないLinux上で実行されているアプリケーションがSIGKILLシグナルを発しても殺されないケースはありますか?SIGKILLが動作しない場合

答えて

3

はい、プロセスがカーネルスペースでブロックされている場合、たとえばブロックされたNFSファイルシステムまたは応答しないデバイスでの読み取り。

4

SIGKILLはブロックすることも無視することもできません(SIGSTOPはできません)。

プロセスがシステムコール内でブロックされている場合(I/Oの待機が一例である)、プロセスは、intrなしでハードマウントされた障害のあるNFSファイルシステムのI/Oを待っているオプションなど)。

ps aと(別のサイドケースがゾンビプロセスであるが、彼らは実際にその時点で処理していないよ。)

+0

ユーザアプリケーションがシステムコールを行うと、そのシステムコールが返るまですべてのシグナルをブロックするのでしょうか? – Mandar

+0

"ブロックされていません"、それは "uninterruptible sleep(D)"状態です。 http://stackoverflow.com/questions/767551/how-to-stop-uninterruptible-process-on-linux –

+1

@マンダル、いいえ。 「すべての信号をブロックする」ことはできません。 D状態はカーネル内部のものです(例えば、CD-ROMからの読み出し、ディスクとの同期など) –

0

チェック(またはあなたが同様に他のフラグを使用することができます)プロセスの状態を。プロセスの状態が

D : uninterruptible sleep (usually IO) 

ある場合 、あなたはそのプロセスをkillすることはできません。
これは、定義されている他のものと同様に、通常、接続されていないNFSファイルシステムへのI/Oを待っているプロセスなど、スタックI/Oによって発生します。

関連する問題