process-cleanup について
process-cleanupは、`/bin/ps`でゾンビプロセスを検出し、必要に応じて親プロセスに子プロセスの回収を促すエージェントスキルです。既定では検出のみ行い、`SIGCHLD`を無視する親プロセスの終了にはユーザー確認が必要です。
主な機能
- 01`/bin/ps`によるゾンビプロセス検出
- 02プロセス状態と親プロセスIDの表示
- 03既定の検出のみモード
- 04`--kill`による`SIGCHLD`送信
- 05親プロセス終了前のユーザー確認
活用シーン
- 01ホスト上のゾンビプロセスの調査
- 02終了済み子プロセスの回収を親に促す
- 03ゾンビが残る場合の親プロセスPID特定
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ paulrberg/ agent-skills --skill process-cleanupインストール後、Claude Code で/process-cleanupを入力して読み込まれたか確認します。
同梱ファイルscripts/kill-zombies.sh
詳細
プロセスのクリーンアップ
/bin/ps を使用してゾンビプロセスを検出し、回収します。
背景
ゾンビ(状態 Z)とは、終了したものの、親プロセスが終了ステータスを回収するための wait() を呼び出していないプロセスです。ゾンビは CPU もメモリも消費しませんが、PID スロットを占有し、蓄積することがあります。ゾンビはすでに終了しているため、kill することはできません。対処方法は次の 2 つです。
- 親プロセスにシグナルを送ることで、
SIGCHLDを受信させ、子プロセスを回収させます - 親プロセスを終了させることで、孤児プロセスを
init/launchdに引き継がせて回収させます
重要:プロセスの状態を確認する際は ps を使用してください
プロセスの状態を確認する際は、必ず BSD 版の ps を使用してください。ps がエイリアスになっている場合は、/bin/ps を使用して回避してください。
# List zombies
/bin/ps ax -o pid,state,ppid,user,command | awk '$2 ~ /Z/'
# List all processes with state
/bin/ps ax -o pid,state,ppid,etime,args
使用方法
ヘルパースクリプトを実行してゾンビをスキャンします。
# Detect only (default) — list zombie processes
bash scripts/kill-zombies.sh
# Reap zombies — send SIGCHLD to parent processes
bash scripts/kill-zombies.sh --kill
安全性
- デフォルトのモードは検出のみです。プロセスにはシグナルを送信しません
--killを指定すると、スクリプトは親プロセスにSIGCHLDを送信します(プロセスを破壊せず、回収を促します)- 親プロセスが
SIGCHLDを無視する場合、スクリプトは親プロセスの PID を報告します。終了させる前に、ユーザーに確認してください - PID 1(
init/launchd)は絶対に終了させないでください
コメント
Markdown 対応