Linux では「プロセスが終了しない」ときによく試されるコマンドが kill -9
(SIGKILL)です。
SIGKILL は最も強制的なシグナルで、通常は必ずプロセスを終了できます。
しかし、まれに kill -9
を実行してもプロセスが消えない という現象が発生します。
本記事では、その原因と解決方法について解説します。
あわせて読みたい


プロセスとジョブの違いを徹底解説!システム管理の基礎を学ぶ
プロセスとは? プロセスは、カーネル(オペレーティングシステムの中心部分)から見た作業の単位です。プログラムが実行されるたびに、カーネルはそのプログラムを管理…
目次
✅ なぜ kill -9 でも終了できないのか?
1. プロセスが D 状態(Uninterruptible Sleep) にある
ps aux
やtop
コマンドで状態を確認すると、STAT 列にD
と表示されることがあります。- これは ディスク I/O やネットワーク I/O を待っている状態 で、カーネル内で処理が完了するまで割り込みやシグナルを受け付けません。
- そのため、
kill -9
を送っても反応せず、ゾンビのように残ってしまいます。
例:
ps aux | grep myprocess
user 1234 0.0 0.1 123456 456 ? D 10:00 0:01 myprocess
あわせて読みたい


Linuxプロセス管理の基本 – 効果的な監視と制御方法
プロセス管理とは? Linuxのプロセス管理は、システムで実行中のアプリケーションやタスクを監視・制御するために非常に重要です。ここでは、プロセスの表示や終了、バ…
2. カーネルレベルの問題
- デバイスドライバやファイルシステムに問題がある場合、プロセスがカーネル内で停止状態になることがあります。
- 例えば、NAS や iSCSI などのネットワークストレージが切断された場合、I/O が返ってこずプロセスが終了できなくなります。
3. ゾンビプロセス(Z 状態)
- ゾンビは終了済みだが親プロセスが
wait()
を呼んでいないため残っている状態です。 - ゾンビ自体を kill することはできません(すでに死んでいるため)。
- 対処は 親プロセスを終了させる か、親が init に引き継がれるのを待つ必要があります。
✅ 解決方法
1. プロセス状態を確認する
ps -o pid,stat,comm -p <PID>
D
→ I/O待ちZ
→ ゾンビR
/S
→ 実行可能
状態を見極めることが第一歩です。
2. D 状態の対処
- 多くの場合、原因デバイスを復旧させるしかありません。
- NFS ならサーバを再起動/復旧
- ディスク障害ならストレージ確認
- 復旧すれば、I/O が返ってきてプロセスも終了可能になります。
💡 注意: D 状態に陥ったプロセスは基本的に「OS再起動」以外で解決できないことが多いです。
3. Z 状態の対処
- 親プロセスを特定する
ps -o ppid= -p <PID>
- 親が不要なら kill することでゾンビも消えます。
4. 最終手段
- システムの安定性が損なわれている場合は OS再起動 が必要です。
- サーバ運用中なら、再起動タイミングを調整することが重要です。
✅ まとめ
kill -9
でも終了しないのは プロセスがカーネル内で停止(D 状態)している場合がほとんど。- ゾンビ(Z 状態) の場合は親プロセスの制御が必要。
- 根本的な解決には 原因デバイスの復旧、または 再起動 が必要になることも多いです。