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

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

終了できないプロセスがありますkill -9 <pid>。特に私はプロセスの所有者なので、この場合の問題は何ですか?私はこの選択から抜け出すことができないと思いますkill

ベストアンサー1

kill -9信号を殺す)プロセスを終了する権限がある限り、常に機能します。デフォルトでは、プロセスはsetuidまたはsetgid以外のユーザーによって開始される必要があります。それ以外の場合はrootユーザーでなければなりません。 1つの例外があります。ルートラもinitPID 1(プロセス)に致命的な信号を送信できません。

しかし、kill -9効果が保証されるわけではありませんまもなく。すべての信号(SIGKILLを含む)は非同期で転送されます。カーネルが信号を送るのに少し時間がかかることがあります。通常、信号を送信するのに最大数マイクロ秒かかります。これは、ターゲットがタイムスライスを取得するのにかかる時間とまったく同じです。ただし、対象がある場合信号をブロックしました、信号はターゲットがロックを解除するのを待ちます。

通常、プロセスはSIGKILLをブロックできません。ただし、カーネルコードは実行され、プロセスは呼び出されるとカーネルコードを実行します。システムコール。システムコールが中断されると、カーネルコードはすべての信号をブロックし、カーネルのどこかに誤ったデータ構造が発生するか、より一般的にはいくつかのカーネル不変性に違反します。したがって、(バグや設計エラーが原因で)システムコールが無期限にブロックされている場合、実際にプロセスを終了することは不可能です。 (しかし、その過程は〜するシステムコールが完了すると終了します。 )

システムコールでブロックされたプロセスは、次の場所にあります。邪魔されない睡眠psまたは、コマンドはtop(ほとんどの unice で)ステータスを表示しますD(元は「D私の考えでは)。

中断されない長いスリープモードの一般的なケースは、プロセスがファイルにアクセスする場合です。ネットワークファイルシステムサーバーが応答しない場合、最新の実装では中断のない省電力モードが適用されない傾向があります(たとえば、Linuxではカーネル2.6.25以降、SIGKILLはNFSアクセスでブロックされたプロセスを中断します)。

プロセスが長時間中断せずにスリープモードになっている場合は、デバッガを接続して次の診断ツールを実行してこれを実行できます。ストレスまたは(またはUNIXタイプに応じて同様のツール)または次のような他の診断メカニズムを使用してください。/proc/PID/syscallLinuxで。バラより「kill -9」を使用してwgetプロセスを終了することはできません。中断のない睡眠プロセスを研究する方法についてのさらなる議論。

時には、または出力で表示されているものを見ることができますZ(またはHLinuxでは違いが何であるかわかりません)。技術的には、これらはプロセスではなく、ゾンビプロセスであり、親プロセスが子プロセスの終了を知らせるように維持されるプロセステーブルのエントリにすぎません。親プロセスが実行されると消えます。pstop集中する(または死)。

おすすめ記事