web-dev-qa-db-ja.com

システムモニターとターミナルを使用してプロセスを強制終了することの違いは何ですか?

Minecraftをシャットダウンしたとき、それが完全に閉じないため、解決策を探しましたが何も見つかりませんでした。しばらくして私はあきらめて、閉じたいときに手動で殺すことにしました。

Pgrepを使用してターミナルでkillしても影響がないようですが、システムモニターを開いて右クリックしてkillすると、正常にシャットダウンします。

システムモニターの方法とターミナルの方法の違いは何ですか?システムモニターは、バックグラウンドでkillコマンドが実行しない他のことを実行しますか?

4
giodamelio

killコマンドとシステムモニターの 'kill'の間に違いはありません。システムモニターはkillにいくつかの引数を提供するだけです。

kill <process-number>、実際にそのプロセスにシグナルを送信して正常に終了しています。これはSIGTERMと呼ばれます。無条件にプロセスを強制終了し、データ損失を引き起こす可能性がある場合は、別のシグナルを送信する必要があります。

kill -9 <process-number>

これにより、SIGKILLがプロセスに送信され、プロセスは直ちに実行を終了します。システムモニターはkill -9プロセスを単に「閉じる」のではなく、プロセスを「強制終了」するように依頼した場合。

SuperUser Stack Exchangeに関するこの回答は役に立ちます

5
Jjed

端末を使用してアプリケーションを強制終了した場合、次のように実行したと思います。

kill 1234

システムモニターで、プロセスを選択し、KILLをプロセスに送信することを選択しました。

デフォルトでは、プレーンkill $pidを使用するときにプロセスに送信されるシグナルはTERMです。これにより、アプリケーションを正常に終了できます。ただし、KILLを送信すると、プログラムはすぐに完全にシャットダウンする(つまり、データを保存する)ことができなくなります。コマンドラインからKILL信号を送信するには、次のコマンドを使用します。

kill -KILL 1234

(このコマンドを実行する別の方法はkill -9 1234です。これは好みの問題です)

1
Lekensteyn

これは、デフォルトではpgrep killがSIGTERM(終了)を送信するためです。アプリケーションが良好な状態でない場合、SIGTERMは機能しません。システムモニタの "Kill Process"はSIGKILLコマンドを送信し、文字通りそれを強制終了します。送信される2つの異なる信号です。これをpgrepで実行する場合は、kill -9を使用します。-9オプションはSIGKILLシグナルを送信し、システムモニターの「キルプロセス」とまったく同じになります。

参考までに、killコマンドの名前は少し誤解を招きます。 man killさんのコメント:

kill-プロセスにシグナルを送信します

これは任意の信号である可能性があります。すべての信号のリストを表示するには、man --sections=7 signalと入力して下にスクロールします。

次に言う:

KillのデフォルトのシグナルはTERMです。

詳細は https://askubuntu.com/a/716814/11929 を参照してください。

0
Elijah Lynn