GNU/Linux >> Linux の 問題 >  >> Linux

「kill-9」が機能しない場合はどうなりますか?

kill -9 <pid>では強制終了できないプロセスがあります 。特に私がそのプロセスの所有者であるため、そのような場合の問題は何ですか。そのkillを回避できるものは何もないと思いました オプション。

承認された回答:

kill -9 (SIGKILL)は、プロセスを強制終了する権限がある場合は常に機能します。基本的に、プロセスはsetuidまたはsetgidではなくユーザーが開始するか、rootである必要があります。例外が1つあります。ルートでさえ、致命的なシグナルをPID 1(init)に送信できません。 プロセス)。

ただし、kill -9 すぐに動作することは保証されていません 。 SIGKILLを含むすべてのシグナルは非同期で配信されます。カーネルは、それらを配信するのに時間がかかる場合があります。通常、信号の配信には最大で数マイクロ秒かかります。これは、ターゲットがタイムスライスを取得するのにかかる時間です。ただし、ターゲットが信号をブロックしている場合、ターゲットが信号のブロックを解除するまで信号はキューに入れられます。

通常、プロセスはSIGKILLをブロックできません。しかし、カーネルコードは可能であり、プロセスはシステムコールを呼び出すときにカーネルコードを実行します。カーネルコードは、システムコールを中断すると、カーネルのどこかでデータ構造が正しく形成されない場合、またはより一般的にはカーネルの不変条件に違反する場合に、すべての信号をブロックします。したがって、(バグまたは設計ミスのために)システムコールが無期限にブロックされた場合、プロセスを強制終了する方法が事実上ない可能性があります。 (ただし、プロセスは システムコールが完了すると強制終了されます。)

システムコールでブロックされたプロセスは、中断できないスリープ状態にあります。 ps またはtop コマンドは(ほとんどのユニスで)状態Dで表示します (元々は「 d isk」と思います。

長時間の中断できないスリープの典型的なケースは、サーバーが応答していないときにNFSを介してファイルにアクセスするプロセスです。最新の実装では、中断のないスリープを課さない傾向があります(たとえば、Linuxでは、intr マウントオプションを使用すると、信号でNFSファイルアクセスを中断できます。

プロセスが長時間中断できないスリープ状態のままである場合は、デバッガーをプロセスに接続するか、straceやdtraceなどの診断ツール(またはUNIXフレーバーに応じて同様のツール)を実行することで、プロセスが実行していることに関する情報を取得できます。 /proc/PID/syscall Linuxでは。中断のないスリープ状態でプロセスを調査する方法の詳細については、「kill-9」でwgetプロセスを強制終了できないを参照してください。

関連:LGPLオープンソースフレームワークのライセンスはどのように機能しますか?

Zとマークされたエントリが表示される場合があります (またはH Linuxでは、psの違いはわかりません) またはtop 出力。これらは技術的にはプロセスではなく、ゾンビプロセスであり、プロセステーブルのエントリにすぎず、親プロセスに子の死を通知できるように保持されます。親プロセスが注意を払う(または死ぬ)と、それらは消えます。


Linux
  1. Makefileとは何ですか?どのように機能しますか?

  2. Webサーバーとは何ですか?Webサーバーはどのように機能しますか?

  3. Linux – -9プロセスを強制終了すべきではないのはいつですか?

  1. 一部のコマンドでBashプロセス置換が機能しないのはなぜですか?

  2. Linux Setuidが機能しませんか?

  3. Psの出力にはどういう意味がありますか?

  1. なぜ`exit&`が機能しないのですか?

  2. rm はどのように機能しますか? rm は何をしますか?

  3. Ctrl + C でプロセスを強制終了できない場合はどうすればよいですか?