utte

kill プロセスにシグナルを送って終了させる

kill [-シグナル] PID...

試してみる

主なオプション

-lシグナルの一覧を表示する。番号を渡すと名前、名前を渡すと番号を表示する
-シグナル送るシグナルを番号か名前で指定する(-9、-KILL、-SIGKILL など)
-s シグナル-シグナル と同じ。-s KILL のように書く
-0何も送らず、プロセスが存在して送れる状態かだけを調べる

解説

名前ではなく PID で指定する

kill は、プロセスID(PID)を指定してシグナルを送るコマンドです。名前で指定したいときは pkill か killall を使います。PID は ps や pgrep で調べます。

よく使うシグナル

番号 名前 意味
1 SIGHUP 端末の切断。設定ファイルの再読み込みにも使われる
2 SIGINT 割り込み(Ctrl+C)
9 SIGKILL 強制終了。プロセスは無視できない
15 SIGTERM 終了要求。何も指定しないとこれが送られる
18 SIGCONT 停止中のプロセスを再開する
19 SIGSTOP プロセスを一時停止する。無視できない

まず 15、効かなければ 9

SIGTERM はプロセス側が受け取って後始末(ファイルの保存や一時ファイルの削除)をしてから終われます。一方 SIGKILL は、カーネルが即座に終了させるので後始末ができません。そのため、まず kill PID で試し、それでも終わらないときだけ kill -9 PID を使います。

権限

自分のプロセスにはシグナルを送れますが、他のユーザーのプロセスには root でないと送れません。存在しない PID を指定すると、No such process というエラーになります。

シェルの組み込みコマンドとして kill が動くので、%1 のようにジョブ番号でも指定できます(jobs で確認)。

このコマンドを使う問題

  1. killでバックグラウンドのプロセスを終了する

関連するコマンド

LinuC 101の出題範囲