プロセス管理
Linux プロセス管理 と監視
Process vs Thread
Process(プロセス)
- プログラムの実行 インスタンス
- 独立 したメモリ空間 を持 つ
- コード、データ、スタックなどを含 む
- OS が管理
Thread(スレッド)
- プロセス内 の実行 単位
- プロセスのメモリ空間 を共有
- より軽量 、切 り替 えコストが低 い
- 並列 実行 可能
Process States
プロセスはライフサイクル中 に異 なる状態 を経験 します:
Running (R)
- 実行中 または実行 待 ち
- CPU で実行
Sleeping (S / D)
- S (Interruptible Sleep) - 割
り込
み可能
なスリープ
- イベント完了 を待 つ(I/O など)
- シグナルで起 こせる
- D (Uninterruptible Sleep) - 割
り込
み不可
なスリープ
- 通常 は I/O 待 ち
- シグナルで中断 できない
Stopped (T)
- プロセスが停止
- 通常 Ctrl+Z または SIGSTOP シグナルで発生
fgまたはbgで再開 可能
Zombie (Z)
- プロセスは終了 したが未 クリーンアップ
- プロセステーブルエントリを占有
- 親 プロセスが終了 状態 を読 み取 るのを待 つ
Zombie Process(ゾンビプロセス)
Zombie Process とは?
子
プロセスが終了
すると、親
プロセスが wait() または waitpid() を呼
び出
して終了
状態
を読
み取
るまで zombie 状態
になります。
問題 :
PID を占有
大量 の zombie は PID リソースを枯渇 させる
killで削除 できない
Zombie Process の識別
# zombie プロセスを確認
ps aux | grep 'Z'
# zombie 数をカウント
ps aux | awk '{if($8=="Z") print}' | wc -l
# zombie の親プロセスを探す
ps -ef | grep defunctSignals(シグナル)
常用 シグナル
| シグナル | 番号 | 説明 | デフォルト動作 |
|---|---|---|---|
| SIGHUP | 1 | ターミナル切断 | 終了 |
| SIGINT | 2 | キーボード割 り込 み (Ctrl+C) | 終了 |
| SIGKILL | 9 | 強制 終了 | 無条件 終了 |
| SIGTERM | 15 | 終了 要求 | グレースフル終了 |
シグナル送信
# グレースフル終了 (デフォルト SIGTERM)
kill <pid>
# 強制終了
kill -9 <pid>
kill -KILL <pid>
# 設定を再読み込み
kill -HUP <pid>
# 同名のすべてのプロセスを終了
killall process_name
# 名前で検索して終了
pkill process_namesystemd Service Management
サービス管理
# サービスを起動
systemctl start service_name
# サービスを停止
systemctl stop service_name
# サービスを再起動
systemctl restart service_name
# 設定を再読み込み
systemctl reload service_name
# 状態を確認
systemctl status service_name起動 時 自動 起動
# 起動時自動起動を有効化
systemctl enable service_name
# 起動時自動起動を無効化
systemctl disable service_name
# 有効化されているか確認
systemctl is-enabled service_name