killコマンドでプロセスを強制終了する方法|kill -9やkillall・pkillの使い分けも


この記事の監修:宮崎智広(Linux教育歴15年以上・受講者3,100名超)
HOMELinux技術 リナックスマスター.JP(Linuxマスター.JP)Linuxtips > killコマンドでプロセスを強制終了する方法|kill -9やkillall・pkillの使い分けも
「プロセスが応答しなくなった」「kill コマンドで終了させたいけど、どのシグナルを使えばいいのかわからない」

サーバー運用をしていると、暴走したプロセスや応答しなくなったサービスを強制的に停止しなければならない場面が必ず出てきます。

この記事では、kill コマンドによるプロセス終了の基本から、killall・pkill との使い分け、シグナルの種類と選び方、そして現場で「やってはいけない」操作まで実践的に解説します。
【この記事でわかること】
・killコマンドでプロセスを終了させる基本構文とシグナルの意味
・kill -9(SIGKILL)とkill -15(SIGTERM)の違いと正しい使い分け
・killallコマンドで同名プロセスをまとめて終了させる方法
・pkillコマンドでプロセス名のパターン指定で終了させる方法
・pgrepでプロセスIDを取得してkillと組み合わせる実践的な使い方

「このままじゃマズい」と感じていませんか?
参考書を開く気力もない、同年代に取り残される不安——
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
図解60P/登録10秒/解除も3秒 / 詳細はこちら

kill コマンドとは? ~ プロセス終了の仕組み

kill コマンドは、指定したプロセスに「シグナル(信号)」を送るコマンドです。

「kill」という名前から「強制終了専用」と思われがちですが、実際にはプロセスへさまざまな指示を送るための汎用コマンドです。再起動の指示(HUP)や一時停止(STOP)なども kill コマンドで行います。

シグナルを省略した場合はデフォルトで SIGTERM(シグナル番号15)が送られ、プロセスに「正常に終了してください」と通知します。プロセスが SIGTERM を無視して終了しない場合に、SIGKILL(シグナル番号9)で強制終了させるのが基本的な流れです。

基本的な使い方 ~ PID を指定してプロセスを終了する

1. PID を確認する

まず、終了させたいプロセスの PID(プロセスID)を確認します。

# ps aux で対象プロセスを探す $ ps aux | grep httpd root 1234 0.0 0.5 23456 5678 ? Ss 10:00 0:00 /usr/sbin/httpd apache 1235 0.0 0.3 23456 3456 ? S 10:00 0:00 /usr/sbin/httpd apache 1236 0.0 0.3 23456 3456 ? S 10:00 0:00 /usr/sbin/httpd

PID は出力の2列目に表示されます。この例では、httpd の親プロセスの PID が 1234 です。

2. SIGTERM で正常終了を試みる

最初は必ず SIGTERM(デフォルト)で終了を試みてください。

# シグナルを省略すると SIGTERM(15)が送られる $ kill 1234 # 明示的に SIGTERM を指定する場合 $ kill -15 1234 $ kill -SIGTERM 1234

SIGTERM はプロセスに「後片付けをしてから終了してください」と伝えるシグナルです。一時ファイルの削除やログの書き込みなど、正常な終了処理が行われます。

3. SIGKILL で強制終了する

SIGTERM を送っても数秒待ってプロセスが残っている場合は、SIGKILL で強制終了します。

# SIGKILL(9)で強制終了 $ kill -9 1234 $ kill -SIGKILL 1234 # 終了したか確認 $ ps aux | grep httpd | grep -v grep

【重要】いきなり kill -9 を使ってはいけない理由

現場でよくある間違いが「とりあえず kill -9」です。SIGKILL はプロセスの終了処理を一切行わずに即座に停止させます。そのため、以下のリスクがあります。

一時ファイルが残る:ロックファイルや PID ファイルが削除されず、次回起動時にエラーになる
データが破損する:書き込み中のファイルやデータベースのトランザクションが中途半端な状態で残る
子プロセスがゾンビ化する:親プロセスが後処理なしで消えると、子プロセスがゾンビプロセスになることがある

鉄則は「まず SIGTERM → 数秒待つ → それでも終了しなければ SIGKILL」の順番です。

よく使うシグナル一覧

kill コマンドで指定できる主要なシグナルを整理します。
番号 シグナル名 動作 用途
1 SIGHUP ハングアップ 設定ファイル再読み込み(デーモンの再起動)
2 SIGINT 割り込み終了 Ctrl+C と同じ動作
9 SIGKILL 強制終了 プロセスが応答しない場合の最終手段
15 SIGTERM 正常終了 kill のデフォルト。まずこれを使う
18 SIGCONT 再開 SIGSTOP で停止したプロセスを再開
19 SIGSTOP 一時停止 プロセスを一時停止(終了はしない)
使用できるシグナルの一覧は kill -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 ...

killall・pkill との使い分け

kill コマンドは PID を指定する必要がありますが、プロセス名で指定したい場合は killall や pkill を使います。

1. killall ~ プロセス名で一括終了

killall は、指定したプロセス名に完全一致するプロセスをすべて終了させます。

# httpd プロセスをすべて終了 $ killall httpd # 確認してから終了(-i オプション) $ killall -i httpd Kill httpd(1234) ? (y/n) y Kill httpd(1235) ? (y/n) y # SIGKILL で強制終了 $ killall -9 httpd

killall は「完全一致」で判定するため、プロセス名を正確に指定する必要があります。

2. pkill ~ 部分一致やユーザー指定で柔軟に終了

pkill は、プロセス名の部分一致や、実行ユーザーを条件にしてプロセスを終了できます。

# プロセス名に「http」を含むプロセスをすべて終了 $ pkill http # 特定ユーザーのプロセスをすべて終了 $ pkill -u apache # 特定ユーザーの特定プロセスを終了 $ pkill -u apache httpd # 終了前に対象を確認したい場合は pgrep で確認 $ pgrep -a httpd 1234 /usr/sbin/httpd -DFOREGROUND 1235 /usr/sbin/httpd -DFOREGROUND

3. どのコマンドを使うべきか

PID がわかっている場合:kill PID が最も確実
同じ名前のプロセスを一括終了したい場合:killall プロセス名 が便利
プロセス名の一部やユーザーで絞り込みたい場合:pkill が柔軟

本番サーバーでは、意図しないプロセスを巻き込まないよう、まず pgrep -a プロセス名 で対象を確認してから kill 系コマンドを実行するのが安全です。

実務で使えるTips

1. 設定ファイル変更後のデーモン再読み込み(SIGHUP)

Apache や Nginx などのデーモンは、SIGHUP を送ると設定ファイルを再読み込みします。サービスを停止せずに設定を反映できるため、運用中のサーバーで重宝します。

# httpd の PID を確認して SIGHUP を送る $ cat /var/run/httpd/httpd.pid 1234 $ kill -HUP 1234 # または pkill を使う $ pkill -HUP httpd

2. バックグラウンドジョブの終了

バックグラウンドで実行中のジョブは、ジョブ番号を使って終了させることもできます。

# バックグラウンドジョブを確認 $ jobs [1]+ Running tail -f /var/log/messages & [2]- Running top & # ジョブ番号で終了(%の後にジョブ番号) $ kill %1

3. 複数の PID をまとめて終了する

kill コマンドは複数の PID をスペース区切りで指定できます。

# 複数の PID をまとめて終了 $ kill 1234 1235 1236

トラブルシュート ~ プロセスが終了できない場合

「Operation not permitted」が出た場合

自分が所有していないプロセスを終了しようとすると、このエラーが出ます。root 権限(sudo)で実行してください。

# 一般ユーザーで実行するとエラー $ kill 1234 -bash: kill: (1234) - Operation not permitted # sudo で実行 $ sudo kill 1234

「No such process」が出た場合

指定した PID のプロセスが既に終了している場合に表示されます。ps aux で現在のプロセス一覧を再確認してください。

$ kill 9999 -bash: kill: (9999) - No such process # PID を再確認 $ ps aux | grep httpd | grep -v grep

kill -9 でも終了しないプロセス(D状態)

ps aux の STAT 列が「D」(割り込み不可のスリープ状態)のプロセスは、カーネル内部でI/O待ちをしているため SIGKILL でも終了できません。

この状態は NFS マウントの応答待ちやディスクI/Oの障害で発生することが多く、原因となっている I/O の問題を解消するか、最終手段としてシステムの再起動が必要です。

ゾンビプロセス(Z状態)の対処

STAT 列が「Z」のゾンビプロセスは、既に実行を終了していますが親プロセスが終了状態を回収していない状態です。ゾンビプロセス自体に kill は効きません。

対処法は親プロセスに SIGCHLD を送るか、親プロセスを終了させることです。

# ゾンビプロセスの親 PID(PPID)を確認 $ ps -eo pid,ppid,stat,cmd | grep Z 5678 5670 Z [defunct] # 親プロセスに SIGCHLD を送る $ kill -SIGCHLD 5670

本記事のまとめ

やりたいこと コマンド
PID を指定して正常終了 kill PID
PID を指定して強制終了 kill -9 PID
設定ファイルの再読み込み kill -HUP PID
プロセス名で一括終了 killall プロセス名
プロセス名の部分一致で終了 pkill プロセス名
特定ユーザーのプロセスを終了 pkill -u ユーザー名
終了対象を事前確認 pgrep -a プロセス名
使用可能なシグナル一覧 kill -l

プロセス管理で詰まったことはありませんか?

killコマンドを正しく使いこなすことは、Linuxサーバー管理の基本スキルです。
ネットの切れ端の情報をコピペするだけでなく、現場で通用する安全なLinuxサーバー構築の「型」を体系的に身につけたい方へ、『Linuxサーバー構築入門マニュアル(図解60P)』を完全無料でプレゼントしています。

「独学の時間がもったいない」「プロから直接、現場の技術を最短で学びたい」という本気の方には、2日で実務レベルのスキルが身につく【初心者向けハンズオンセミナー】も開催しています。


無料メルマガで学習を続ける

Linuxの実践スキルをメールで毎週お届け。
登録は1分、解除もいつでも可。

登録無料・いつでも解除できます

暗記不要・1時間後にはサーバーが動く

3,100名以上が実践した「型」を無料で公開中

プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。

登録10秒/合わなければ解除3秒 / 詳細はこちら

Linux無料マニュアル(図解60P) 名前とメールで30秒登録

宮崎 智広

この記事を書いた人

宮崎 智広(みやざき ともひろ)

株式会社イーネットマーキュリー代表。現役のLinuxサーバー管理者として15年以上の実務経験を持ち、これまでに累計3,100名以上のエンジニアを指導してきたLinux教育のプロフェッショナル。「現場で本当に使える技術」を体系的に伝えることをモットーに、実践型のLinuxセミナーの開催や無料マニュアルの配布を通じてLinux人材の育成に取り組んでいる。

趣味は、キャンプにカメラ、トラウト釣り。好きな食べ物は、ラーメンにお酒。休肝日が作れない、酒量を減らせないのが悩み。最近、ドラマ「フライトエンジェル」を観て涙腺が崩壊しました。