違いはありますか
kill -9 212121
そして
kill 212121
違いはありますか
kill -9 212121
そして
kill 212121
回答:
Ubuntuのマニュアルページでkill
は、-9
スイッチの目的について説明しています(かなり不安定な方法で行われています)。
Name Num Action Description
KILL 9 exit cannot be blocked
別のマニュアルページの内容を次に示します。
このコマンド
kill
は、指定されたプロセスまたはプロセスグループに指定されたシグナルを送信します。シグナルが指定されていない場合、TERM
シグナルが送信されます。TERM
信号は、この信号をキャッチしないプロセスを強制終了します。他のプロセスでは、このシグナルをキャッチできないため、KILL
(9
)シグナルを使用する必要がある場合があります。
したがって、-9
スイッチを使用すると、プロセスが効果的に強制終了されます。凍結または応答しないプロセスは単純なTERM
信号に応答しない場合でも、KILL
信号を送信すると死にます。
キルコマンドが定義されて送信されます信号を与えられたアイデンティティ(PID)でプロセスに:
kill -<signal> <pid>
もちろん、自分が所有するプロセスのみを強制終了できますが、rootはすべてのプロセスを強制終了できます。計算信号の概要については、ウィキペディアを参照してください。
kill
送信できるシグナルは、マンページにリストされています。信号は、名前または番号で表すことができます。シグナルが与えられない場合、デフォルトのシグナル15または TERM
使用されている。
したがって、以下の3つのコマンドはすべて同一です。
kill -9 1234
kill -KILL 1234
kill -SIGKILL 1234
差SIGTERM
とは、SIGKILL
アプリケーションが信号に作用することができる方法です。
TERM
:アプリケーションは終了、つまりシャットダウンルーチンを適切に実行できます。 KILL
:アプリケーションはすぐに停止され、強制終了されます(これにより、データが失われたり、場合によっては想定されるクラッシュを報告するようにapportを上げることがあります)。以下はすべて同義です。
kill -9 1234
kill -KILL 1234
kill -SIGKILL 1234
シグナル処理の世界では、SIGKILLはプログラムではなくオペレーティングシステムによって処理される数少ないユニークなものの1つであることを指摘する価値があります。を実行するkill -9
と、アプリケーションに自分自身を終了するように指示するのではなく、プログラムが何をしていても、プログラムの実行を停止するようにOSに指示しています。
後にSIGKILLが送信され、プログラムは直ちに停止されます。プログラムの代わりにカーネル呼び出し(ファイルIOなど)が実行されている場合、呼び出しに応じて、それらの呼び出しは終了するまで続行される場合とされない場合がありますが、プログラム自体はそれ以上実行されません。ここでは、トレースされたタスクまたはデバッガーで実行されているタスクの動作が異なる場合があることに注意してください。
ブロックできない他のシグナルはSIGSTOPで、これは同様の効果がありますが、代わりにプログラムをフリーズします。後でSIGCONTを送信して再開できます。この動作はOSによって完全に制御され、プログラムは事前の通知を受け取りません。
他のすべての信号はプログラムに送信されます。どのように選択しても処理できます。または、信号を無視した場合は、デフォルトの動作に従います。
以下に、プロセスに送信している可能性のあるいくつかの有用なシグナルを示します。
kill
としますkillall
。cat /etc/passwd | head -n1
にcat
プロセスにSIGPIPEを送信し、cat
ファイル全体を終了する前に終了させます。これらの信号はすべて、独自の設定で「自然に」発生しますが、信号を使用して条件を偽造し、目的の結果を得ることができます。
たとえば、誰かのSSHセッションを終了したい場合は、単にプロセスを強制終了できますが、そうすることで、プロセスがHISTORYファイルを更新するのを防ぐことができます。これはセキュリティ上の理由から重要です。ただし、代わりにSIGHUPを送信すると、プロセスは接続が切断されたと見なし、標準のクリーンアップを実行します。
SIGQUIT
。デフォルトのアクションはコアをダンプして終了することです。これは、プログラムが何か非常に悪いことをしている場合、すぐに停止する必要があり、後でデバッグできるようにする場合に使用できます。
kill -9