killallコマンド:プロセス名で終了する方法と-9シグナル、psmiscのインストール
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コマンドのインストール
killallはpsmiscパッケージに入っています。AlmaLinux 9.8 サーバーで/usr/bin/killallが属するパッケージをrpmで確認すると、psmisc 23.4と表示されました。
rpm -qf --qf '%{NAME} %{VERSION}\n' /usr/bin/killallpsmisc 23.4rpm -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 xxsleep2141 xxsleep-a1
2142 xxsleep-a1
2150 xxsleep-a2
2155 xxsleep-longnam4行目は実行ファイル名がxxsleep-longname-x1ですが、プロセス名はxxsleep-longnamで切れていました。
-aを付けると、実行したコマンドライン全体が表示されます。同じ名前の2つのxxsleep-a1は、末尾の秒単位の引数300と310で区別しました。
pgrep -a xxsleep2141 /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-a12141
2142名前を1つそのまま入れて番号だけを確認するときはpidofを使います。xxsleep-a1を探すと、2つの番号が1行に表示されました。
pidof xxsleep-a12142 2141psは-Cの後ろにカンマで複数の名前を書くと、名前が完全に一致するプロセスだけを出力します。
ps -o pid,comm -C xxsleep-a1,xxsleep-a2 PID COMMAND
2141 xxsleep-a1
2142 xxsleep-a1
2150 xxsleep-a2Debian 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-zzxxsleep-zz: no process found番号が分かっているプロセスを1つだけ終了するときは Linuxのkillコマンドでその番号にだけシグナルを送ります。
3️⃣ killallコマンドのオプション
xxsleep-longname-x1で起動したプロセスの名前を/proc/PID/commから読むと、先頭15文字のxxsleep-longnamだけが残っていました。
cat /proc/2155/commxxsleep-longnam16文字のxxsleep-longnameでpgrepを実行しました。
pgrep -a xxsleep-longname出力なしで終了コード1で終わり、15文字のxxsleep-longnamで探し直した結果にはそのプロセスが表示されました。
pgrep -l xxsleep-longnam2155 xxsleep-longnamkillallは、15文字より長い名前を受け取ったときにフルネームを読めないプロセスがあると、先頭15文字が一致するものをすべて対象にし、-eを付けるとそうした項目をスキップします(公式マニュアル基準)。Debian 12 サーバーで-eと-vを付けて先頭15文字のxxsleep-longnamを指定すると、名前が15文字で切れたほかのプロセス3つをスキップしたという行が表示され、[no process found]で終わりました。
killall -e -v xxsleep-longnamkillall: 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-x1killall: 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-a2Killed 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-a1Kill xxsleep-a1(2171) ? (y/N) Kill xxsleep-a1(2172) ? (y/N)-uはそのアカウントが所有するプロセスだけを選び、名前を省くとそのアカウントのプロセス全体が対象になります。アカウント名の後ろにxxsleep-a1も書くと、残っていたxxsleep-a1にだけシグナルを送りました。
killall -v -u user xxsleep-a1Killed 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 名前 | その名前のプロセスにSIGTERM | 2つの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の代わりにSIGKILL | Killed 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 サーバーで実行した出力に合わせた再現です。
4️⃣ killallのシグナル
送るシグナルは[-HUP]や[-SIGHUP]のように名前で、[-1]のように番号で、または-sオプションの後ろに書きます(公式マニュアル基準)。[killall -9 プロセス名]は9番のシグナルであるSIGKILLを送ります。SIGKILLはプロセスが捕捉も無視もできないシグナルなので(公式マニュアル基準)、プロセスは後始末をできないまま終了します。そのため、既定のシグナルであるSIGTERMで終了しないときに送ります。
Debian 12 サーバーで再び起動したxxsleep-a2に-vと一緒に-9を付けると、シグナル番号9が記された行が表示されました。
killall -9 -v xxsleep-a2Killed 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 15TERMkill -l 9KILL一覧にないシグナル名を書くと、[FOO: unknown signal; killall -l lists signals.]という形の文が表示されます(公式マニュアル・プログラムの文言基準)。
🔢 FAQ & おすすめコンテンツ
ℹ️ 提携について
当サイトのコンテンツにはアフィリエイトリンクが含まれています。訪問者がこのリンクを通じて商品やサービスを購入すると、当サイトは販売元から手数料を受け取ります。この過程において、購入者が支払う金額(イベント割引適用で金額が下がります↓)は上昇しません。掲載されている価格・割引・在庫情報は作成時点のものであり、実際とは異なる場合がありますので、ご購入前に販売元にて最終確認をお願いいたします。商品の選定および評価は独自の基準に基づいて行われており、手数料の支払いの有無は紹介順や評価内容に影響を与えません。