web-dev-qa-db-ja.com

kill -9が効果がない場合にLinuxでプロセスをkillする方法

Kill -9はまだプロセスにシグナルを送るだけだと思います。プロセスが適切に動作していない場合、kill -9は効果がないと思います。実際、今日私が初めてkill -9がスタックしたRubyプロセスに送信された場合、効果がないことを確認しました。そこで、私の質問です:プロセスを強制終了するためのより厳しい方法はありますか?

5
cat pants

マシンを再起動する必要があります。 kill -9はプロセスを強制終了しません。つまり、プロセスがカーネルでスタックしています。それが何に付着しているかを理解してそれをはがすことができない限り、あなたができることは何もありません。それがスタックしている理由は、それが何かを待っていることと、待機を完全に停止するために必要なロジックが単に存在しないことです。

(上記は、プロセスがinitに既に親化されていることを前提としています。そうでない場合、その親がそれを保持している可能性があります。その親を強制終了する必要がある場合があります。)

14
David Schwartz

スタックしたジョブがあり、9または15のシグナルでジョブが停止しない場合は常に、シグナル30(SIGPWR)を送信します。ほぼ毎回、ジョブがクリアされます。停電信号が送信されなかったのを思い出せません。

6
tpg2114

はい、再起動します...

通常、kill -9を実行できないことは問題ではありませんが、これらのプロセスはシステムを占有するために多くのことを行っていないため、おそらく単なるゾンビです。それを取り除くために再起動が必要になったのは、使用する必要があるTCPポートを「占有」していたときだけです。

3
aseq