killコマンドの-9オプションの目的は何ですか?


回答:


28

Ubuntuのマニュアルページでkillは、-9スイッチの目的について説明しています(かなり不安定な方法で行われています)。

Name     Num   Action    Description
KILL       9   exit      cannot be blocked

別のマニュアルページの内容を次に示します

このコマンドkillは、指定されたプロセスまたはプロセスグループに指定されたシグナルを送信します。シグナルが指定されていない場合、TERMシグナルが送信されます。TERM信号は、この信号をキャッチしないプロセスを強制終了します。他のプロセスでは、このシグナルをキャッチできないため、KILL9)シグナルを使用する必要がある場合があります。


したがって、-9スイッチを使用すると、プロセスが効果的に強制終了されます。凍結または応答しないプロセスは単純なTERM 信号に応答しない場合でも、KILL信号を送信すると死にます。


40

キルコマンドが定義されて送信されます信号を与えられたアイデンティティ(PID)でプロセスに:

kill -<signal> <pid>

もちろん、自分が所有するプロセスのみを強制終了できますが、rootはすべてのプロセスを強制終了できます。計算信号の概要については、ウィキペディアを参照してください。

kill送信できるシグナルは、マンページにリストされています。信号は、名前または番号で表すことができます。シグナルが与えられない場合、デフォルトのシグナル15または TERM使用されている。

したがって、以下の3つのコマンドはすべて同一です。

kill -9 1234
kill -KILL 1234
kill -SIGKILL 1234

SIGTERMとは、SIGKILLアプリケーションが信号に作用することができる方法です。

  • TERM:アプリケーションは終了、つまりシャットダウンルーチンを適切に実行できます。
  • KILL:アプリケーションはすぐに停止され、強制終了されます(これにより、データが失われたり、場合によっては想定されるクラッシュを報告するようにapportを上げることがあります)。

16

以下はすべて同義です。

kill -9 1234
kill -KILL 1234
kill -SIGKILL 1234

シグナル処理の世界では、SIGKILLはプログラムではなくオペレーティングシステムによって処理される数少ないユニークなものの1つであることを指摘する価値があります。を実行するkill -9と、アプリケーションに自分自身を終了するように指示するのではなく、プログラムが何をしていても、プログラムの実行を停止するようにOSに指示しています。

後にSIGKILLが送信され、プログラムは直ちに停止されます。プログラムの代わりにカーネル呼び出し(ファイルIOなど)が実行されている場合、呼び出しに応じて、それらの呼び出しは終了するまで続行される場合とされない場合がありますが、プログラム自体はそれ以上実行されません。ここでは、トレースされたタスクまたはデバッガーで実行されているタスクの動作が異なる場合があることに注意してください。

ブロックできない他のシグナルはSIGSTOPで、これは同様の効果があります、代わりにプログラムをフリーズします。後でSIGCONTを送信して再開できます。この動作はOSによって完全に制御され、プログラムは事前の通知を受け取りません。

他のすべての信号はプログラムに送信されます。どのように選択しても処理できます。または、信号を無視した場合は、デフォルトの動作に従います。

以下に、プロセスに送信している可能性のあるいくつかの有用なシグナルを示します。

  • SIGHUP - hangup
    ユーザーに切断したことをプログラムに通知します(SSHセッションやターミナルウィンドウが閉じられたなど)。
    通常、プログラムを正常にシャットダウンします。
  • SIGINT - 割り込み
    送られたあなたが打ったときCTRL+ C
    通常「何をやっているの停止」を意味-またはプログラムを強制終了しない場合があり
  • SIGTERM - 終了
    によって送信されるデフォルトkillとしますkillall
    通常、プログラムを終了します...プログラムが実行していることをすべて終了した後です。
  • SIGSTOP - stopを押すと
    送信されますCTRL+ Z
    上記で説明したプログラムを一時停止します
  • SIGPIPE - パイプが閉じは
    パイプラインが閉鎖されたことをプログラムに指示します。通常、プログラムを終了します。
    たとえば、最初の行が印刷された後cat /etc/passwd | head -n1catプロセスにSIGPIPEを送信し、catファイル全体を終了する前に終了させます。

これらの信号はすべて、独自の設定で「自然に」発生しますが、信号を使用して条件を偽造し、目的の結果を得ることができます。

たとえば、誰かのSSHセッションを終了したい場合は、単にプロセスを強制終了できますが、そうすることで、プロセスがHISTORYファイルを更新するのを防ぐことができます。これはセキュリティ上の理由から重要です。ただし、代わりにSIGHUPを送信すると、プロセスは接続が切断されたと見なし、標準のクリーンアップを実行します。


Ctrl + \ send SIGQUIT。デフォルトのアクションはコアをダンプして終了することです。これは、プログラムが何か非常に悪いことをしている場合、すぐに停止する必要があり、後でデバッグできるようにする場合に使用できます。
サイモンリヒター

@SimonRichterああ、あなたは正しい。一定。
タイラー

6

kill -9意味:プロセスはカーネルによって強制終了されます。この信号は無視できません。9は、キャッチまたは無視できないKILLシグナルを意味します

用途:SIGKILL singal

キルの意味:シグナルなしのキルコマンドはシグナル15を渡し、プロセスを通常の方法で終了します。

用途:プログラマーが処理できるSIGTERMシグナル

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.