【 pkill 】コマンド――名前を指定してプロセスを終了させるLinux基本コマンドTips(132)

本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回は、プロセス名を指定してプロセスを終了させる「pkill」コマンドです。

» 2017年08月03日 05時00分 公開
[西村めぐみ@IT]
「Linux基本コマンドTips」のインデックス

Linux基本コマンドTips一覧

 本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介してきます。今回は、プロセス名を指定してプロセスを終了させる「pkill」コマンドです。

pkillコマンドとは?

 「pkill」はプロセス名を指定して、終了シグナル(TERMシグナル)などの「シグナル」を送信するコマンドです。

 同じ用途のコマンドに「killall」(第8回)がありますが、対象を指定する方法や使用できるオプションが異なります。

 killallコマンドと違い、pkillコマンドの場合は対象とするプロセス名を正規表現で指定します※1。そのためpkillコマンドを使用する際には指定した内容が意図通りになっているかどうか、注意する必要があります。例えば「killall abc」は「abcという名前のプロセス」を対象としますが、「pkill abc」の場合「名前にabcを含む全てのプロセス」が対象となります。

※1 killallの場合、正規表現で指定するには「-r」オプションが必要です。




pkillコマンドの書式

pkill [オプション] [プロセス名などのパターン]

※[ ]は省略可能な引数を示しています。オプションかパターンのどちらかの指定が必要です。





pkillの主なオプション(目的別)

pkillの主なオプション(実行内容)

短いオプション 長いオプション 意味
-シグナル --signal シグナル 送信するシグナルを番号またはシグナル名で指定する(本文参照)
-e --echo 対象となったプロセスとプロセスIDを表示する
-c --count 該当するプロセス(シグナルを送ったプロセス)の個数を表示する

pkillの主なオプション(対象の指定方法)

短いオプション 長いオプション 意味
-f --full コマンドライン全体をパターンマッチの対象とする
-x --exact プロセス名と完全に一致(マッチ)したものを対象とする ※2
-P プロセスID --parent プロセスID 指定したプロセスIDが親であるプロセスを対象とする。プロセスIDは「,」区切りで複数指定可能
-s セッションID --session セッションID 指定したセッションIDであるプロセスを対象とする。セッションIDは「,」区切りで複数指定可能、「0」はpkill自身のプロセスグループと見なされる
-g グループID --pgroup グループID 指定したプロセスグループのいずれかに属するプロセスを対象とする。グループIDは「,」区切りで複数指定可能で、「0」はpkill自身のプロセスグループと見なされる
-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 対象のプロセスから最も昔に起動されたものだけを対象とする

※2 「pkill to」とした場合、topコマンドのプロセスも対象になるが、「pkill -x to」と指定すると対象とならない。




プロセス名を指定してプロセスを終了させる

 「pkill 名前」で指定した名前のプロセスを終了させます。例えば「pkill top」で、topコマンドが終了します(画面1)。

コマンド実行例

pkill top画面1


画面1 画面1 topコマンドを終了させたところ


うっかり使うと危ないpkillコマンド

 pkillで指定する“名前”は、拡張正規表現(第10回)として解釈されます。従って、「pkill top」の場合、実際の動作は“名前にtopを含むプロセスの終了”となります。

 pkillは、名前を使ってプロセスIDを表示する「pgrep」コマンド(第131回)とほとんど同じオプションが使用できるので※3、どのプロセスが対象になるのか、あらかじめpgrepで確認してから実行すると安心です。

※3 pkillの場合、表示内容を指定する「-d」「-l」「-a」の他、検索条件の否定を意味する「-v」(--inverse)オプションが使用できません。なお、pkillとpgrepはpsコマンドと同じ「procps-ng」パッケージ(システム情報関連のパッケージ)に収録されています。



 pgrepはプロセスIDを表示するコマンドです。「-l」オプションを指定するとプロセス名も一緒に表示します。pkillでは「-e」オプションを使うと、実行の対象となったプロセスを事後表示できます。

 以下の実行例では、「pkill vi」だとどのような動作になるかを「pgrep -l vi」であらかじめ確認しています。ここではプロセスIDが1139の「libvirtd」※4と、プロセスIDが4384の「vim」が見つかりました。なお、CentOS環境では「vi」(ターミナルで使用できるテキストエディタ)というコマンド名で「/usr/bin/vim」が起動するようエイリアスが設定されています。

※4 libvirtdは仮想マシン用のシステムサービスで、一般ユーザーが「pkill vi」や「pkill libvirtd」を実行しても「許可されていない操作(Operation not permitted)」となり失敗する。



 今回終了させたいのは「vim」の方なので、「pkill vim」とするか、pgrepの結果分かったプロセスIDを使って、「kill 4384」とすればよいことが分かります。killコマンドはプロセスIDを使ってプロセスを終了させるコマンドです。

画面2 画面2 終了させたいプロセスを事前に確認後、終了したところ


他のシグナルを送るには

 pkillコマンドは、killコマンドやkillallコマンド同様、プロセスに「シグナル」を送るコマンドです。デフォルトではプロセスの終了命令「TERM」シグナルを送ります。

 通常コマンドの多くはTERMシグナルを受け取ると終了しますが、TERMでは終了できない状態となっている場合もあります。そのときは強制終了命令である「KILL」シグナルを使用します。

 「pkill -KILL 名前」または「pkill -9 名前」のように、シグナルの名前か数字を使って指定します※5。

主なシグナル

数値 表記 意味
1 HUP 制御している端末/プロセスがハングアップした
2 INT キーボードからの割り込み命令([Ctrl]+[C]キー)
3 QUIT キーボードからの中止命令([Ctrl]+[\]キー)
9 KILL プロセスの強制終了命令
15 TERM プロセスの終了命令(デフォルト)
18 CONT プロセスの再開命令
19 STOP プロセスの停止命令([Ctrl]+[Z]キー)

※5 「SIGHUP」「SIGINT」のように“SIG”を付ける表記もあり、どちらも使用可能です。使用できるシグナルはkillコマンドを使い「kill -l」で確認できます(第8回)。




筆者紹介

西村 めぐみ(にしむら めぐみ)

PC-9801NからのDOSユーザー。PC-486DX時代にDOS版UNIX-like toolsを経てLinuxへ。1992年より生産管理のパッケージソフトウェアの開発およびサポート業務を担当。著書に『図解でわかるLinux』『らぶらぶLinuxシリーズ』『はじめてでもわかるSQLとデータ設計』『シェルの基本テクニック』など。2011年より、地方自治体の在宅就業支援事業にてPC基礎およびMicrosoft Office関連の教材作成およびeラーニング指導を担当。


Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。