スライド

プロセスとシグナル
by はなわ
今日のテーマ
• プロセスについて周辺知識の確認
• シグナルについて周辺知識の確認
• ps, top, lsofの紹介
• プロセス
• シグナル
• ps, top, lsof
• まとめ
プロセス
• プロセス=プログラムを実行する実体
• 1プログラム 1個以上のプロセス
プロセス状態
• 実行状態:CPUに割当たっている
• 実行可能状態:CPUの空き待ち
• 待ち状態:外部リソースの入出力待ち
プロセスの状態遷移
実行状態
いったんお休み
CPUが空いた!
実行可能
状態
ディスクI/O発生
待ち状態
ディスクI/O完了
load ave.の意味
• ロードアベレージ
• 実行可能状態のプロセス数の平均
• load ave大=CPUが空き次第仕事が
できるはずのプロセスが多い
• 「重さ」とは一致しないことも
プロセスID(PID)
• プロセスにはプロセスIDが割り振られる
• 一意な数字
• おそらく16bit
プロセスID(PID)
• プロセスにはプロセスIDが割り振られる
• 一意な数字
• おそらく16bit
親プロセス
• プロセスには親がいる
• 例:シェルからコマンド起動
→コマンドの親プロセスはシェル
親プロセス
• プロセスには親がいる
• 例:シェルからコマンド起動
→コマンドの親プロセスはシェル
親プロセス
• プロセスには親がいる
• 例:シェルからコマンド起動
→コマンドの親プロセスはシェル
ゾンビプロセス
• 親が看取ってくれないと子は死ねない
• wait(2)システムコール
• これ以上死ねないのでkillはムダ
• 原因は親プロセスのバグ OR 過負荷
ゾンビプロセス
• killしてもゾンビプロセスは死なない!
ゾンビプロセス
• killしてもゾンビプロセスは死なない!
ゾンビプロセス
• killしてもゾンビプロセスは死なない!
• プロセス
• シグナル
• ps, top, lsof
• まとめ
シグナル
• プロセス間通信の一種
• 非同期イベント
• プロセスの終了/停止/状態通知をする
シグナルの種類
• INT
• TERM
• HUP
• KILL
→どれもデフォルトの挙動はプロセス終了
INTシグナル
• 端末からCtrl+cをタイプしたときに送られる
• 普通のプログラムはこれで死ぬはず
TERMシグナル
• killコマンドがデフォルトで送るシグナル
• まあ、これも普通は死ぬはず
HUPシグナル
• 端末を失ったときに送られるシグナル
• ログアウトしたとか、回線切れたとか
• これも普通は死にます
• TERMより強力とされています
KILLシグナル
• プロセスを殺すための最強のシグナル
• どうにも死なないプロセスに送る
• ゾンビプロセスや入力待ち状態だと殺せない
シグナルハンドリング
• シグナルを受け取った際、独自の処理が可能
• Ctrl+c→ファイルに書き出す、など
• KILLシグナルはハンドリングできない
• TERM, HUP, KILLの順序は意味がある
• プロセス
• シグナル
• ps, top, lsof
• まとめ
psコマンド
• プロセスの状態を見る
• ps auxwww(BSD風)
• ps -few(SYSV風)
• OSによって少し挙動が違うので注意
• TIPS: ps eで環境変数が見える
topコマンド
• プロセスの状態を見続ける
• これも何種類か実装があるようです。注意。
lsofコマンド
• lsof [-p [PID]]
• プロセスが開いているファイルの一覧
• トラブルシューティングに役立つ
• プロセス
• シグナル
• ps, top, lsof
• まとめ
まとめ
• ロードアベレージの意味
• ゾンビプロセスはkillできない
• いきなりKILLシグナルを送るのはNG
ご清聴
ありがとう
ございました