| name | .claude/skills/process-lifecycle-management/SKILL.md |
| description | Node.jsプロセスのライフサイクル管理を専門とするスキル。 Linuxカーネルのプロセス管理思想に基づき、プロセスの生成、実行、 監視、終了までの完全な制御と、シグナル処理、ゾンビプロセス回避を設計します。 📚 リソース参照: このスキルには以下のリソースが含まれています。 必要に応じて該当するリソースを参照してください: - `.claude/skills/process-lifecycle-management/resources/child-process-patterns.md`: 子プロセス管理パターン - `.claude/skills/process-lifecycle-management/resources/process-states.md`: プロセス状態管理ガイド - `.claude/skills/process-lifecycle-management/resources/signal-handling.md`: SIGTERM、SIGINT、SIGHUPの適切なハンドリングとGraceful Shutdown実装 - `.claude/skills/process-lifecycle-management/scripts/check-process-health.mjs`: プロセスヘルスチェックスクリプト - `.claude/skills/process-lifecycle-management/templates/signal-handler.template.ts`: Signal Handler Template 専門分野: - プロセス状態管理: 起動、実行、待機、終了の各フェーズ - シグナル処理: SIGTERM、SIGINT、SIGKILL、SIGHUPの適切なハンドリング - 子プロセス管理: spawn、fork、execのパターンとリソース回収 - ゾンビプロセス回避: 適切なプロセス終了と回収メカニズム - PM2連携: PM2によるプロセスライフサイクルの外部管理 使用タイミング: - Node.jsプロセスの起動・終了フローを設計する時 - シグナルハンドラーを実装する時 - 子プロセスの管理戦略を決定する時 - PM2でプロセスを管理する設定を行う時 Use proactively when designing process startup/shutdown flows, implementing signal handlers, or managing child processes. |
| version | 1.0.0 |
Process Lifecycle Management
概要
プロセスライフサイクル管理は、Node.js アプリケーションの起動から終了までの 全フェーズを制御し、システムリソースの適切な利用と安定稼働を保証します。
主要な価値:
- 予測可能なプロセス動作
- シグナルによる優雅な制御
- リソースリークの防止
- 高可用性の実現
リソース構造
process-lifecycle-management/
├── SKILL.md
├── resources/
│ ├── process-states.md
│ ├── signal-handling.md
│ └── child-process-patterns.md
├── scripts/
│ └── check-process-health.mjs
└── templates/
└── signal-handler.template.ts
コマンドリファレンス
リソース読み取り
# プロセス状態ガイド
cat .claude/skills/process-lifecycle-management/resources/process-states.md
# シグナル処理ガイド
cat .claude/skills/process-lifecycle-management/resources/signal-handling.md
# 子プロセスパターン
cat .claude/skills/process-lifecycle-management/resources/child-process-patterns.md
スクリプト実行
# プロセスヘルスチェック
node .claude/skills/process-lifecycle-management/scripts/check-process-health.mjs <pid>
テンプレート参照
# シグナルハンドラーテンプレート
cat .claude/skills/process-lifecycle-management/templates/signal-handler.template.ts
ワークフロー
Phase 1: プロセス起動
起動シーケンス:
- 環境変数の読み込み
- 設定ファイルの解析
- 依存サービスへの接続確認
- ポートのバインド(必要に応じて)
- ready 状態の通知
PM2 との連携:
// PM2にready状態を通知
process.send && process.send("ready");
判断基準:
- 必須環境変数は設定されているか?
- 依存サービスへの接続は成功するか?
- 起動タイムアウトは適切か?
リソース: resources/process-states.md
Phase 2: プロセス実行
実行中の監視項目:
- メモリ使用量
- CPU 使用率
- イベントループの遅延
- アクティブな接続数
ヘルスチェック設計:
// シンプルなヘルスチェック
const healthCheck = () => ({
status: "healthy",
uptime: process.uptime(),
memory: process.memoryUsage(),
pid: process.pid,
});
判断基準:
- 定期的なヘルスチェックを実施しているか?
- メモリリークの兆候はないか?
- イベントループは正常か?
Phase 3: シグナル処理
対応すべきシグナル:
| シグナル | 動作 | 用途 |
|---|---|---|
| SIGTERM | Graceful Shutdown | PM2 stop/restart |
| SIGINT | Graceful Shutdown | Ctrl+C |
| SIGHUP | 設定再読み込み | ログローテーション |
| SIGUSR2 | カスタム動作 | デバッグ情報出力 |
シグナルハンドラー設計:
process.on("SIGTERM", async () => {
console.log("SIGTERM received, shutting down...");
await gracefulShutdown();
process.exit(0);
});
リソース: resources/signal-handling.md
Phase 4: プロセス終了
終了シーケンス:
- 新規リクエストの受付停止
- 進行中リクエストの完了待機
- データベース接続のクローズ
- キャッシュのフラッシュ
- ログのフラッシュ
- プロセス終了(exit code 0)
終了コード規約:
| コード | 意味 | 用途 |
|---|---|---|
| 0 | 正常終了 | 意図した終了 |
| 1 | 一般エラー | 予期しないエラー |
| 2 | 設定エラー | 環境変数・設定不備 |
| 130 | SIGINT | Ctrl+C |
| 143 | SIGTERM | kill/PM2 stop |
判断基準:
- 終了コードは適切に設定されているか?
- すべてのリソースは解放されているか?
- 終了ログは出力されているか?
Phase 5: 子プロセス管理
子プロセスパターン:
- spawn: 長時間実行、ストリーム処理
- fork: Node.js プロセス間通信
- exec: 短時間コマンド実行
ゾンビプロセス回避:
const child = spawn("command", ["args"]);
child.on("exit", (code) => {
console.log(`Child exited with code ${code}`);
});
// 必ずexitイベントを処理
リソース: resources/child-process-patterns.md
ベストプラクティス
すべきこと
- シグナルハンドラー実装: SIGTERM/SIGINT は必須
- タイムアウト設定: 無限待機を避ける
- 終了コード設定: 意味のある exit code
- ログ出力: 起動・終了時のログ
避けるべきこと
- シグナル無視:
process.on('SIGTERM', () => {})は危険 - 同期ブロッキング: 終了処理での同期 I/O
- ゾンビ放置: 子プロセスの未回収
- リソース未解放: DB 接続、ファイルハンドルの放置
PM2 との統合
wait_ready モード
// アプリケーション側
const server = app.listen(port, () => {
process.send && process.send('ready');
});
// ecosystem.config.js
{
wait_ready: true,
listen_timeout: 10000
}
Graceful Shutdown 連携
// PM2からのSIGINTを処理
process.on("SIGINT", async () => {
await closeConnections();
process.exit(0);
});
変更履歴
| バージョン | 日付 | 変更内容 |
|---|---|---|
| 1.0.0 | 2025-11-26 | 初版作成 |
関連スキル
- .claude/skills/pm2-ecosystem-config/SKILL.md (
.claude/skills/pm2-ecosystem-config/SKILL.md) - .claude/skills/graceful-shutdown-patterns/SKILL.md (
.claude/skills/graceful-shutdown-patterns/SKILL.md) - .claude/skills/memory-monitoring-strategies/SKILL.md (
.claude/skills/memory-monitoring-strategies/SKILL.md)