kill コマンド

プロセスを終了させるか、シグナルを送信します。

概要

kill コマンドはプロセスにシグナルを送信するコマンドで、最も一般的には実行中のプロセスを終了させるために使用されます。デフォルトでは TERM(終了)シグナルを送信しますが、プロセスID(PID)またはジョブ指定で識別されるプロセスに対して、任意の指定されたシグナルを送信することができます。

オプション

-s, --signal [シグナル]

送信するシグナルを指定します(名前または番号で)

$ kill -s SIGTERM 1234

-l, --list [シグナル]

利用可能なシグナル名を一覧表示するか、シグナル名と番号を相互に変換します

$ kill -l
 1) SIGHUP       2) SIGINT       3) SIGQUIT      4) SIGILL       5) SIGTRAP
 6) SIGABRT      7) SIGBUS       8) SIGFPE       9) SIGKILL     10) SIGUSR1
11) SIGSEGV     12) SIGUSR2     13) SIGPIPE     14) SIGALRM     15) SIGTERM
...

-9

SIGKILL シグナルを送信します。これはプロセスの強制終了を行い、プロセスによってキャッチまたは無視することはできません

$ kill -9 1234

-15

SIGTERM シグナル(デフォルト)を送信します。これは正常な終了をリクエストします

$ kill -15 1234

使用例

PID でプロセスを終了させる

$ kill 1234

プロセスを強制的に終了させる

$ kill -9 1234

名前で特定のシグナルを送信する

$ kill -s SIGHUP 1234

複数のプロセスにシグナルを送信する

$ kill -TERM 1234 5678 9012

ヒント:

最初にプロセスIDを見つける

kill を使用する前に ps または pgrep を使用して PID を見つけます:

$ pgrep firefox
1234
$ kill 1234

名前ベースの終了には pkill を使用する

PID を最初に見つける代わりに、pkill を使用して名前でプロセスを終了させます:

$ pkill firefox

シグナルの違いを理解する

よくある質問

Q1. kill -9 と kill -15 の違いは何ですか?

A. kill -15(SIGTERM)は正常な終了をリクエストし、プロセスがクリーンアップすることを許可します。kill -9(SIGKILL)は即時終了を強制し、プロセスによってキャッチまたは無視することはできません。

Q2. PID がわからない場合、どうやってプロセスを終了させますか?

A. プロセス名の後に pkill を使用します:pkill firefox。あるいは、ps aux | grep プロセス名 で最初に PID を見つけることもできます。

Q3. なぜ kill -9 が時々機能しないのですか?

A. 中断不可能なスリープ状態(通常はI/O待ち)のプロセスやゾンビプロセスは、SIGKILL でも終了させることができません。また、あなたが所有しているプロセスまたはroot権限がある場合のみ終了させることができます。

Q4. 特定のユーザーのすべてのプロセスを終了させるにはどうすればよいですか?

A. pkill -u ユーザー名 を使用して、特定のユーザーが所有するすべてのプロセスを終了させます。

参考文献

https://www.gnu.org/software/coreutils/manual/html_node/kill-invocation.html

改訂履歴