web-dev-qa-db-ja.com

-9つのプログラムを殺しますが、それでもハングアップします

KUbuntuで以前に送信したバックグラウンドジョブをすべて削除しようとしました

kill -9 $(jobs -p)

このコマンドはすぐに次のようなメッセージを出しましたが

[1] myjob1を殺した

[2] myjob2を殺した

私はまだ彼らのプロセスがtopの出力にぶら下がっていて、CPUとメモリの使用量が稼働時間と空き時間の出力で変更されていないのを見ることができます。

だから私は彼らをきちんと殺していなかったに違いないと思います。誰かが私に何が起こっているのか、そして私は何をすべきかを説明できますか?

一番上に、kと入力してPIDを入力すると、プロセスを1つずつ強制終了できることがわかりました。 SOこれはコマンドkillとは異なりますか?

また、オンラインのどこかで見つけました http://www.ruhr.de/home/smallo/award.html kill-9を推奨しないことについて

Kill-9フォームレターの無用な使用

(忌まわしき引用)

ダメダメダメ。 kill-9は使用しないでください。

それはプロセスにきれいにする機会を与えません:

1)ソケット接続をシャットダウンします

2)一時ファイルをクリーンアップします

3)子供たちにそれがなくなることを知らせます

4)端子特性をリセットします

などなど。

通常、15を送信し、1〜2秒待って、それが機能しない場合は2を送信し、それが機能しない場合は1を送信します。それが機能しない場合は、プログラムの動作が悪いため、バイナリを削除してください。

Kill-9は使用しないでください。植木鉢を片付けるためだけにコンバインを持ち出さないでください。

これは本当ですか? 「送信15」、「送信2」、「送信1」とはどういう意味ですか?それらは自分自身をコマンドしますか、それとも「kill -15 PID」、「kill -2 PID」、「kill -1PID」ですか?

ありがとう、よろしく!

11
Tim

プロセスはおそらく死んでいますが、「ゾンビプロセス」であるため、プロセステーブルエントリに表示されます。子プロセスが終了して完全に消え(プロセステーブルエントリを除く)、親がその終了ステータスを(待機関数のいずれかを介して)フェッチできない場合、それはゾンビと呼ばれます...ゾンビを殺す(信号を介して)ゾンビはしませんすでに終了しているので動作します。あなたがする必要があるのは、その親プロセスを見つけて、1つのクリーンを殺すことです。したがって、kill-9を使用しません。

ゾンビを殺すための2つの簡単なステップがあります...

  1. 親がまだ生きている場合は、それを殺してみてください(またはSIGHUPが必要なすべてです)
  2. 1番が失敗した場合は、カーネルにバグがあります。再起動は友だちであり、そのバグを修正します:->
9
nkr1pt

見る man kill利用可能なさまざまな信号の定義については、はい。

これらは、ユーザーがプロセスを「完了」したことをプロセスに通知しますが、理由は多少異なります。SIGTERMは、「現在のタスクを終了し、その後終了します。別のタスクを開始しないでください」と解釈される場合があります。 「実行して終了する」とは、SIGHUPは、誰も聞いていないことを意味します(サーバープロセスは、コンソール出力を停止して実行を継続することにより、SIGHUPに合法的に反応する可能性があります)。

  • 9は [〜#〜] sigkill [〜#〜] であり、プロセスが内部でキャッチして処理できない唯一のシグナルであるという点で特別です。その結果、カーネルはプロセスの制御を返さず、クリーンアップする機会がなくなります。
6
puetzk

kill -15 PIDの代わりにkill -9 PID(または別の番号)を使用することを意味します。数字は異なる nixシグナル と同等です。

「kill-9」と入力する代わりに、「kill-1」または「kill-15」と入力することを意味します。 Kill -9は、実行中のプロセスの先頭にある筋金入りの弾丸であり、メモリリークを引き起こす可能性のあるダーティな状態で死んで殺します、何とか何とか。

Kill -9と入力しても機能しない場合は、プロセスが再生成されていないこと、およびそのプロセスを強制終了する権限があることを確認します。

1
Satanicpuppy

シグナル9はSIGKILLです。 SIGKILLを送信すると、OSはプロセスをただちに強制終了するように求められ、質問はありません。プロセスは事前に通知されておらず、その後クリーンアップする機会はありません。

シグナル15はSIGTERMです。 SIGTERMを送信すると、OSはプロセスに自身をシャットダウンするように要求します。

OSがプロセスがIOを実行していると判断した場合、またはそれがゾンビ(親がその後クリーンアップしなかった子プロセス)である場合、SIGKILLは無視される可能性があります。

SIGTERMはアプリケーションによって無視される場合がありますが、OSがシャットダウン中にSIGTERMを送信し、プログラムがまだ実行中の場合はすぐにSIGKILLが送信されるため、アプリケーションがこれを行うことはお勧めしません。

注:コマンドラインkillは、常にOSに信号をアプリケーションに送信するように要求します。これは、プロセスの所有者などに基づいて実行される場合とされない場合があります。

0
Powerlord