LoginSignup
0
0

プロセスの関係、状態、終了

Posted at

親が子を生成し、木構造になる

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もできるのか。
システムコールは凄そう

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0