【Linux】シグナル送信(kill、killall、pkillコマンド)

Linuxでシグナル送信を行うkill、killall、pkillコマンドの違いと使い方についてまとめました。

シグナル送信(kill、killall、pkillコマンド)

プロセスに終了や再起動などのシグナル(命令)を送信できるコマンドはkill、killall、pkillです。
kill、killall、pkillコマンドの違いと使い方を紹介します。

killコマンド

killコマンドは、指定したプロセスやジョブに対してシグナルを送信し、終了・再起動させます。
シグナルを指定しない場合、デフォルト動作(TERMシグナルの送信=プロセス終了)が行われます。

 kill [-シグナル名 or -シグナル番号] プロセスID
 kill -s [シグナル名 or シグナル番号] プロセスID
 kill -SIGシグナル名 プロセスID
 シグナル名 シグナル番号 概要
HUP(SIGHUP) 1 ハングアップ(端末の切断による終了)。
INT(SIGINT) 2 割り込みによる終了。端末からの割り込み(Ctrl+Cと同じ)を行い、停止させる。
QUIT 3 端末からcoreqダンプを作成して終了要求。(CTRL+\ と同じ)
KILL(SIGKILL) 9 プロセスの強制終了要求(クリーンアップせずに強制終了)。
TERM(SIGTERM) 15 プロセスの終了要求(デフォルト動作、クリーンアップして強制終了)。
CONT(SIGCONT) 18(環境依存) 一時停止状態のプロセスを再開。中断状態のプロセスの再開を通知。バックグラウンドに切替えたプロセスを再開する。
STOP(SIGSTOP) 19(環境依存) プロセスを一時停止。プロセスの実行中断を通知。
TSTP 20(環境依存) 端末から入力されたプロセスの一時停止。サスペンド(CTRL+Z と同じ)。

例えば、「kill 123」コマンドを実行すると、プロセスID「123」にはTERM(SIGTERM)が送信され、指定したPIDのプロセスがキルされます。

プロセスを一時停止するシグナルは「TSTP」と「STOP」です。
一時停止中のプロセスを再開するシグナルは「CONT」です。

killallコマンドの使い方

killallコマンドは、プロセス名を指定してシグナルを送信します。

killall [オプション] プロセス名
オプション短縮形 オプション 概要
-i –interactive シグナル送信前に確認メッセージを表示
-l –list シグナル名の一覧を表示
-r –regexp プロセス名を正規表現で指定
-e –exact 指定した名前が完全一致しなければシグナルを送信しない
-s シグナル –signal シグナル プロセスに送るシグナル名または番号。-シグナル名、-番号でも指定可能。
-q –quiet 対象となるプロセスがなかった場合もメッセージを表示しない
-I –ignore-case 指定したプロセス名の大小文字を区別しない
-g –process-group 指定したプロセスが所属しているグループにシグナルを送信
-y 時間 –younger-than 時間 指定時間より新しいプロセスにシグナルを送信
-o 時間 –older-than 時刻 指定時刻より古いプロセスにシグナルを送信
-u ユーザー –user ユーザー 指定したユーザーのプロセスにだけシグナルを送信

pkillコマンド

pkillコマンドは、正規表現でプロセス名を指定してシグナルを送信します。

 pkill [オプション] [プロセス名など]
オプション 概要
 -シグナル または  –signal シグナル シグナルを送信するシグナル番号またはシグナル名を指定
 -e または  –echo 対象プロセスとプロセスIDを表示
 -c または  –count シグナルを送信したプロセスの個数を表示
対象の指定方法 対象
-f または  -full コマンドライン全体
-x または –exact プロセス名と完全に一致したもの
-P プロセスID または -parent プロセスID 指定したプロセスIDが親であるプロセス。プロセスIDはカンマ(,)区切りで複数指定可能。
-s セッションID または –session セッションID 指定したセッションIDであるプロセス。セッションIDはカンマ区切りで複数指定可能。
-g グループID または –pgroup グループID 指定したプロセスグループのいずれかに属するプロセス。グループIDはカンマ区切りで複数指定可能。
-G グループ または –group グループ 指定した実グループ(real group ID)によるプロセス。グループ名もしくはグループIDで指定し、カンマ区切りで複数指定可能。
-u ユーザー または –euid ユーザー 指定した実効ユーザー(effective user)によるプロセス。ユーザー名もしくはユーザーIDで指定し、カンマ区切りで複数指定可能。
-U ユーザー または –uid ユーザー 指定した実ユーザー(real user)によるプロセス。ユーザーは名前またはIDで指定。カンマ区切りで複数指定可能。
-t 端末 または –terminal 端末 指定した端末で実行されているプロセス。端末は「tty1」など、「/dev/」抜きで指定。カンマ区切りで複数指定可能。
–ns プロセスID 指定したプロセスIDの名前空間(namespace)。
–nslist 指定 指定した名前空間(例:ipc、mnt、net、pid、user、utsなど)。
-F ファイル名 または –pidfile ファイル名 プロセスIDをファイルから読み出す
-L または –logpidfile 「-F」で指定したファイルがロックされてなければ終了(failで終了)
-n または –newest 対象のプロセスから最も新しく起動されたもの。
-o または –oldest 対象のプロセスから最も昔に起動されたもの。

【使用例】killコマンドでプロセスをクリーンアップせずに強制終了

プロセスID 123のプロセスをクリーンアップせずに強制終了させます。

kill -SIGKILL 123

もしくは

kill -9 123

【使用例】フォアグラウンドで実行中のプロセスに割り込みシグナルを送信し、プロセスを終了させる

フォアグラウンドで実行中にプロセスに割り込みシグナルを送信し、プロセスを終了させるには、「Ctrl+C」を押すか、以下のいずれかのコマンドを実行します。

$ kill -SIGINT 123
$ killall -SIGINT 123

【使用例】特定のコマンドを実行している全てのプロセスをクリーンアップして終了させる

特定のコマンド(MyCmd)を実行している全てのプロセスをクリーンアップして終了させるには、以下のいずれかのコマンドを実行します。

$ killall -SIGTERM MyCmd

$ killall -s 15 MyCmd

【使用例】特定ユーザーが実行している全てのプロセスを終了させる

特定ユーザー(例:user01)が実行している全てのプロセスを終了させるには、以下のコマンドを実行します。

$ killall -KILL -u user01

【使用例】プロセス名を指定して終了させる

プロセス名を指定して終了させるには、以下のコマンドを実行します。

$ pkill -f プロセス名

関連ページ

【LinuC】試験対策と例題まとめ
LinuCの試験対策と例題(学習サイト)についてまとめました。
LPICの試験対策と例題まとめ
LPICの試験対策と例題(学習サイト)についてまとめました。
【Linux超入門】システムの基礎とよく使うコマンドなど徹底解説
Linuxシステムの基礎とよく使うコマンドなどについて入門者向けに解説します。

コメント