親が子を生成し、木構造になる
systemd(1)-+-ModemManager(605)-+-{ModemManager}(625)
|
....
| |-gnome-terminal-(2427)-+-bash(2438)---su(2449)---bash(2450)---pstree(2535)
...
pstreeコマンドを使えばプロセスの親子関係を木構造で表示
してくれます。
pstreeは、デフォルトではコマンド名だけ
を表示するのですが、-pオプションをつけてPID
も表示するようにしておくと便利です。
出典
ps auxでプロセス全ての情報を取得する
root@***********# ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.3 0.3 103512 13148 ? Ss 16:59 0:02 /sbin/init s
...
root 3911 0.0 0.0 9920 3288 pts/0 R+ 17:13 0:00 ps aux
気づき
STAT プロセスの状態がRは実行状態、Sはスリープ状態
一つずつのプロセスの状態がわかる。
オプション
R running or runnable (on run queue)
S interruptible sleep (waiting for an event to complete)
...
s is a session leader
+ is in the foreground process group
出典
man ps
プロセスの終了
親のシステムコールで子のプロセスのメモリを回収する
#!/bin/bash
false &
wait $!
echo "falseこまんどが終了しました: $?"
falseプロセスの終了を待ち合わせる。falseコマンドのPIDは$!変数から得られる
wait後にfalseプロセスの戻り値は$?変数から得られる
出典
これらのシステムコールはいずれも、呼び出し元プロセスの子プロセスの 状態変化を待ち、状態が変化したその子プロセスの情報を取得するのに 使用される。
出典
気づき
このスクリプトが親でfalse&が子のプロセスなのか。
子がスリープ状態になったからwaitで取得できてその後のechoもできるのか。
システムコールは凄そう