Linux でのプロセス管理は、システム管理者にとっても開発者にとっても基本的なスキルです。動作の不調なアプリケーションのトラブルシューティングを行う場合でも、サービスを停止する場合でも、プロセスを安全に終了(キル)する方法を知ることは不可欠です。このガイドでは、特権付きで起動されたプロセスを含め、プロセスを効果的に管理する手順を紹介します。扱うコマンドは、kill、pkill で、ゾンビプロセスへの対処法も解説します。
特権付きで起動されたプロセスをキルする
プロセスが sudo で起動された場合、それを終了するには同じレベルの権限が必要です。次の手順に従って、このようなプロセスを安全に停止してください:
1. プロセス ID(PID)を調べる
最初のステップは、ps コマンドを使って対象プロセスのプロセス ID(PID)を特定することです。
ps -ef | grep <process_name>
このコマンドは、PID を含むプロセスの詳細を表示します。
2. プロセスを停止する
PID を取得したら、kill コマンドを特権付きで使用してプロセスを終了します:
sudo kill -15 <PID>
重要ポイント:
- SIGTERM(15): このシグナルはプロセスに丁寧に停止を求めるもので、終了前にリソースをクリーンアップする時間を与えます。
- SIGKILL(9): このシグナルは最後の手段としてのみ使用してください。クリーンアップなしにプロセスを強制終了するため、ファイルの破損や操作の未完了につながる恐れがあります。
pkill を使ってシンプルにする
より手軽な方法として、pkill コマンドを使うと、PID を手動で調べることなく、名前でプロセスを終了できます。
1. プロセスを確認する
プロセスを終了する前に、pgrep を使って一致するプロセスを確認してください:
pgrep -l <process_name>
このコマンドは、指定した名前に一致するすべてのプロセスを、その PID とともに一覧表示します。
2. プロセスをキルする
確認できたら、pkill を使って終了シグナルを送信します:
pkill <process_name>
プロのヒント:誤って別のプロセスを終了しないよう、pgrep の結果を必ず再確認してください。
ゾンビプロセスへの対処
ゾンビプロセスとは、実行は完了したものの、親プロセスによるクリーンアップを待ってプロセステーブルに残り続けているプロセスのことです。ゾンビプロセスを直接キルすることはできませんが、親プロセスに対処することで解決できます。
1. ゾンビプロセスを特定する
ゾンビプロセスを特定するには、ps コマンドを使用します。出力では次のように表示されます:<defunct>
ps aux | grep -i <process_name>
2. ゾンビプロセスを解決する
ゾンビプロセスをクリーンアップするには、次の手順に従ってください:
a. 親プロセスを特定する
ゾンビプロセスの親プロセス ID(PPID)を調べます:
ps -o ppid= -p <zombie_pid>
b. 親プロセスをキルまたは再起動する
親プロセスを終了または再起動し、ゾンビをクリーンアップできるようにします:
sudo kill -15 <parent_pid>
親プロセスを再起動できない場合は、最後の手段としてシステムの再起動が必要になることがあります。
プロセス管理のベストプラクティス
- シグナルを賢く使う: プロセスが正常に終了できるよう、
SIGTERM(15)のようなシグナルをSIGKILL(9)よりも常に優先してください。 - コマンドを再確認する:
pgrepやpkillのようなツールを使用する際は、予期しない結果を避けるため、結果を確認してください。 - システムリソースを監視する: 最適なパフォーマンスを維持するため、ゾンビプロセスやリソースを大量に消費するアプリケーションがないか、システムを定期的に監視してください。
参考資料
詳しくは、次の公式リソースをご覧ください: