killallコマンド:プロセス名で終了する方法と-9シグナル、psmiscのインストール

テスト環境RHEL系AlmaLinux 9.8psmisc 23.4rootアカウントDebian 12 · psmisc 23.6 一般アカウント(killallを実行)
プロセス・ジョブ予約コマンドkillall場所/usr/bin/killall2026-11-03 確認

killallコマンドは、プロセス番号(PID)の代わりにプログラム名で実行中のプロセスを選んでシグナルを送るLinuxコマンドで、シグナルを指定しなければSIGTERMを送ります(公式マニュアル基準)。同じ名前のプロセスをまとめて終了するコマンドなので、AlmaLinux 9 サーバーでsleepを別の名前でコピーして起動した4つのプロセスをpgrepとpsで先に確認しました。15文字より長い実行ファイルは、プロセス名に先頭15文字だけが残っていました。

killallは、Debian 12 サーバーの一般アカウントでテスト用に起動したxxsleepプロセスにだけ実行しました。結果ボックスは、AlmaLinux 9.8 サーバーのrootアカウントで実行したrpm、pgrep、ps、pidof、cat、killの出力と、Debian 12 サーバーで実行したkillallの出力です。プロセス番号(PID)、プロセス名、実行ファイルのパス、アカウント名は例の値に置き換えました。

1️⃣ killallコマンドのインストール

  • ↪️ psmiscパッケージとバージョンの確認

killallはpsmiscパッケージに入っています。AlmaLinux 9.8 サーバーで/usr/bin/killallが属するパッケージをrpmで確認すると、psmisc 23.4と表示されました。

rpm -qf --qf '%{NAME} %{VERSION}\n' /usr/bin/killall
psmisc 23.4

rpm -qlで見た同じパッケージのファイル一覧には、pstreeとfuserも含まれていました。

コマンドが見つからないという[command not found]が表示されたら、psmiscパッケージをインストールします。RHEL系は[dnf install psmisc]、Debian系は[apt install psmisc]の形です。Debian 12 サーバーにはpsmisc 23.6がすでにインストールされており、killallは/usr/bin/killallにありました。

AlmaLinux 9.8 サーバーで確認すると、名前が似ているpkillはprocps-ngパッケージに入っており、killはシェルの組み込みコマンドでした。

2️⃣ killallコマンドの使い方

  • ↪️ プロセス名で対象を確認

基本の形は[killall プロセス名]です。指定した名前で実行中のプロセスをすべて探してシグナルを送り、名前を複数書くと名前ごとに同じことを行います(公式マニュアル基準)。

同じ名前のプロセスは一度に終了するので、その名前で何が実行中かをpgrepで先に確認します。作業フォルダーにsleepをxxsleep-a1、xxsleep-a2、xxsleep-longname-x1という名前でコピーし、xxsleep-a1だけを2回起動して計4つを実行したあと、-lで番号と名前を出力しました。

pgrep -l xxsleep
2141 xxsleep-a1
2142 xxsleep-a1
2150 xxsleep-a2
2155 xxsleep-longnam

4行目は実行ファイル名がxxsleep-longname-x1ですが、プロセス名はxxsleep-longnamで切れていました。

-aを付けると、実行したコマンドライン全体が表示されます。同じ名前の2つのxxsleep-a1は、末尾の秒単位の引数300と310で区別しました。

pgrep -a xxsleep
2141 /root/work/xxsleep-a1 300
2142 /root/work/xxsleep-a1 310
2150 /root/work/xxsleep-a2 320
2155 /root/work/xxsleep-longname-x1 330

名前が完全に一致するプロセスだけを探すときは-xを付けます。xxsleep-a1を指定した結果は番号2つでした。

pgrep -x xxsleep-a1
2141
2142

名前を1つそのまま入れて番号だけを確認するときはpidofを使います。xxsleep-a1を探すと、2つの番号が1行に表示されました。

pidof xxsleep-a1
2142 2141

psは-Cの後ろにカンマで複数の名前を書くと、名前が完全に一致するプロセスだけを出力します。

ps -o pid,comm -C xxsleep-a1,xxsleep-a2
    PID COMMAND
   2141 xxsleep-a1
   2142 xxsleep-a1
   2150 xxsleep-a2

Debian 12 サーバーで同じ名前で4つのプロセスを起動し[killall xxsleep-a1]を実行すると、何も出力せずに終了コード0で終わりました。pgrepで再び探すと、2つのxxsleep-a1は消え、xxsleep-a2とxxsleep-longname-x1だけが残っていました。名前の代わりにスラッシュ(/)を含むパスを書くと、名前に関係なくそのファイルを実行中のプロセスを選びます(公式マニュアル基準)。

存在しない名前xxsleep-zzを指定すると、名前の後ろに[no process found]が付いた行が表示され、終了コード1で終わりました。終了コードは、指定した名前ごとに1つ以上を終了したときだけ0になります(公式マニュアル基準)。

killall xxsleep-zz
xxsleep-zz: no process found

番号が分かっているプロセスを1つだけ終了するときは Linuxのkillコマンドでその番号にだけシグナルを送ります。

3️⃣ killallコマンドのオプション

  • ↪️ -eと15文字の名前、-i、-v、-u、-r

xxsleep-longname-x1で起動したプロセスの名前を/proc/PID/commから読むと、先頭15文字のxxsleep-longnamだけが残っていました。

cat /proc/2155/comm
xxsleep-longnam

16文字のxxsleep-longnameでpgrepを実行しました。

pgrep -a xxsleep-longname

出力なしで終了コード1で終わり、15文字のxxsleep-longnamで探し直した結果にはそのプロセスが表示されました。

pgrep -l xxsleep-longnam
2155 xxsleep-longnam

killallは、15文字より長い名前を受け取ったときにフルネームを読めないプロセスがあると、先頭15文字が一致するものをすべて対象にし、-eを付けるとそうした項目をスキップします(公式マニュアル基準)。Debian 12 サーバーで-eと-vを付けて先頭15文字のxxsleep-longnamを指定すると、名前が15文字で切れたほかのプロセス3つをスキップしたという行が表示され、[no process found]で終わりました。

killall -e -v xxsleep-longnam
killall: skipping partial match quota_events_un(37)
killall: skipping partial match acpi_thermal_pm(112)
killall: skipping partial match ext4-rsv-conver(246)
xxsleep-longnam: no process found

フルネームのxxsleep-longname-x1を指定すると、同じスキップの行の後ろに、そのプロセスにシグナルを送った行が表示されました。

killall -e -v xxsleep-longname-x1
killall: skipping partial match quota_events_un(37)
killall: skipping partial match acpi_thermal_pm(112)
killall: skipping partial match ext4-rsv-conver(246)
Killed xxsleep-longname-x1(2155) with signal 15

-vを付けると、シグナルを送ったプロセスごとに名前と番号、シグナル番号を含む行が表示されました。

killall -v xxsleep-a2
Killed xxsleep-a2(2150) with signal 15

-iはプロセスごとに終了するかを尋ねます。2つのxxsleep-a1を再び起動し、標準入力でyとnを順に渡すと、2つの問いが1行に続けて表示され、1つ目のxxsleep-a1だけが終了して2つ目は残りました。

printf 'y\nn\n' | killall -i xxsleep-a1
Kill xxsleep-a1(2171) ? (y/N) Kill xxsleep-a1(2172) ? (y/N)

-uはそのアカウントが所有するプロセスだけを選び、名前を省くとそのアカウントのプロセス全体が対象になります。アカウント名の後ろにxxsleep-a1も書くと、残っていたxxsleep-a1にだけシグナルを送りました。

killall -v -u user xxsleep-a1
Killed xxsleep-a1(2172) with signal 15

-oと-yは開始した時刻で選び、時間は[-o 30m]のように数字の後ろにs、m、h、d、w、M、yの単位を付けて書きます。

-rは名前を拡張正規表現として読みます。^xxsleep-aのパターンをpgrepに渡すと、xxsleep-aで始まる3つのプロセスが表示されました。

pgrep -l '^xxsleep-a'
2141 xxsleep-a1
2142 xxsleep-a1
2150 xxsleep-a2

-wは、シグナルを送ったプロセスがすべて消えるまで1秒ごとに確認しながら待ちます。シグナルを無視したり、ゾンビ状態で残ったりするプロセスなら、いつまでも待ち続けることがあります。

下の1つ目の表はこの記事で実際に実行した確認コマンドとkillallのオプションで、実行していないkillallのオプションは2つ目の表に公式マニュアル基準でまとめました。

📌 プロセスの確認とkillall:この記事で実行した結果

コマンド作業この記事で確認した結果
pgrep -l 名前名前を含むプロセスの番号と名前xxsleepで4行が表示され、長い名前は先頭15文字のxxsleep-longnamまでしか見えない
pgrep -a 名前番号と実行したコマンドライン全体同じ名前の2つのxxsleep-a1を末尾の引数300と310で区別
pgrep -x 名前名前が完全に一致するプロセスの番号だけxxsleep-a1で2141と2142の2行
pidof 名前その名前で実行中の番号を1行でxxsleep-a1で2142 2141
ps -o pid,comm -C 名前名前が完全に一致するプロセスの番号と名前、カンマで複数の名前xxsleep-a1の2行とxxsleep-a2の1行
cat /proc/PID/commプロセス名(先頭15文字まで)2155はxxsleep-longnam
killall 名前その名前のプロセスにSIGTERM2つのxxsleep-a1が終了して終了コード0、存在しない名前xxsleep-zzはno process foundと終了コード1
killall -e 名前15文字より長い名前はフルネームが一致するときだけxxsleep-longnamはno process found、xxsleep-longname-x1は終了
killall -v 名前シグナルを送ったプロセスごとに結果を出力Killed xxsleep-a2(2150) with signal 15
killall -i 名前終了する前にプロセスごとに確認yとnを入れると1つ目のxxsleep-a1だけ終了
killall -u アカウント名そのアカウントが所有するプロセスだけ名前と一緒に書くと、そのアカウントのxxsleep-a1だけ終了
killall -9 名前SIGTERMの代わりにSIGKILLKilled xxsleep-a2(2173) with signal 9

📎 その他のオプション: 公式マニュアルより

オプション作業
-I, --ignore-case名前を大文字・小文字の区別なしで比較
-g, --process-groupプロセスの代わりにそのプロセスグループにシグナル(グループごとに1回)
-l, --list既知のシグナル名の一覧
-n, --ns PIDそのPIDと同じPID名前空間のプロセスだけ、既定はすべての名前空間
-o, --older-than 時間その時間より前に開始したプロセスだけ(単位 s、m、h、d、w、M、y)
-q, --quiet終了したプロセスがなくても知らせない
-r, --regexp名前を拡張正規表現として読む
-s, --signal シグナルSIGTERMの代わりに送るシグナル
-V, --versionバージョン情報を出力
-w, --waitシグナルを送ったプロセスがすべて消えるまで待つ
-y, --younger-than 時間その時間より後に開始したプロセスだけ
-Z, --context パターンセキュリティコンテキストが拡張正規表現パターンに一致するプロセスだけ、ほかの引数より前に書く、名前は省略可

🔲 killallコマンドシミュレーター

下のシミュレーターは、xxsleepの4つのプロセスに例のアカウントuser1のxxsleep-a2を加えた一覧から始まります。チップを押して[killall -v]と[-i]、[-u]で一覧から消える行を比べられます。killallの出力文はDebian 12 サーバーで実行した出力に合わせた再現です。

killallコマンドシミュレーターpsmisc 23.4
[root@server work]#
ブラウザー内だけで動作します。左の一覧は例の値で、killallはDebian 12 サーバーで実行した出力文に沿った再現で、一覧からだけ消します。

4️⃣ killallのシグナル

  • ↪️ -sオプションとkillall -9、シグナル番号

送るシグナルは[-HUP]や[-SIGHUP]のように名前で、[-1]のように番号で、または-sオプションの後ろに書きます(公式マニュアル基準)。[killall -9 プロセス名]は9番のシグナルであるSIGKILLを送ります。SIGKILLはプロセスが捕捉も無視もできないシグナルなので(公式マニュアル基準)、プロセスは後始末をできないまま終了します。そのため、既定のシグナルであるSIGTERMで終了しないときに送ります。

Debian 12 サーバーで再び起動したxxsleep-a2に-vと一緒に-9を付けると、シグナル番号9が記された行が表示されました。

killall -9 -v xxsleep-a2
Killed xxsleep-a2(2173) with signal 9

シグナルの名前と番号は[kill -l]で確認しました。killallにも、既知のシグナル名を出力する-lオプションがあります。

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
16) SIGSTKFLT	17) SIGCHLD	18) SIGCONT	19) SIGSTOP	20) SIGTSTP
21) SIGTTIN	22) SIGTTOU	23) SIGURG	24) SIGXCPU	25) SIGXFSZ
26) SIGVTALRM	27) SIGPROF	28) SIGWINCH	29) SIGIO	30) SIGPWR
31) SIGSYS	34) SIGRTMIN	35) SIGRTMIN+1	36) SIGRTMIN+2	37) SIGRTMIN+3
38) SIGRTMIN+4	39) SIGRTMIN+5	40) SIGRTMIN+6	41) SIGRTMIN+7	42) SIGRTMIN+8
43) SIGRTMIN+9	44) SIGRTMIN+10	45) SIGRTMIN+11	46) SIGRTMIN+12	47) SIGRTMIN+13
48) SIGRTMIN+14	49) SIGRTMIN+15	50) SIGRTMAX-14	51) SIGRTMAX-13	52) SIGRTMAX-12
53) SIGRTMAX-11	54) SIGRTMAX-10	55) SIGRTMAX-9	56) SIGRTMAX-8	57) SIGRTMAX-7
58) SIGRTMAX-6	59) SIGRTMAX-5	60) SIGRTMAX-4	61) SIGRTMAX-3	62) SIGRTMAX-2
63) SIGRTMAX-1	64) SIGRTMAX

番号を1つ入れると、そのシグナルの名前だけが表示されました。killallが既定で送る15はTERM、-9で送る9はKILLでした。

kill -l 15
TERM
kill -l 9
KILL

一覧にないシグナル名を書くと、[FOO: unknown signal; killall -l lists signals.]という形の文が表示されます(公式マニュアル・プログラムの文言基準)。

🔢 FAQ & おすすめコンテンツ

killallはpsmiscパッケージ、pkillはpgrepと同じprocps-ngパッケージのコマンドです。pkillはpgrepのように名前の一部を拡張正規表現で探し、killallは-rを付けたときだけ名前を正規表現として読みます(公式マニュアル基準)。

psmiscの公式マニュアルは、Linux以外のシステムでは[killall 名前]が期待と違う動作をすることがあり、管理者アカウントで実行するときは特に注意するよう書いています。ほかのシステムでは、そのシステムのマニュアルで先に確認します。

一度に書ける名前の数には上限があり、unsigned long整数のサイズに8を掛けた値です。64ビットシステムは通常64個、32ビットシステムは32個です(公式マニュアル基準)。

ℹ️ 提携について
当サイトのコンテンツにはアフィリエイトリンクが含まれています。訪問者がこのリンクを通じて商品やサービスを購入すると、当サイトは販売元から手数料を受け取ります。この過程において、購入者が支払う金額(イベント割引適用で金額が下がります↓)は上昇しません。掲載されている価格・割引・在庫情報は作成時点のものであり、実際とは異なる場合がありますので、ご購入前に販売元にて最終確認をお願いいたします。商品の選定および評価は独自の基準に基づいて行われており、手数料の支払いの有無は紹介順や評価内容に影響を与えません。

コメントを残す

メールアドレスが公開されることはありません。 ※ が付いている欄は必須項目です

人間であることを証明してください: 5   +   9   =