Lから始まるLinux

2章36話
バックグラウンド実行
2章37話 プロセス
もくじ
2章38話
プロセス操作
プロセス
若木 しげる
今回はコマンドを実行した後で 「何が起きているのか」 覗いてみよう!
若木 みどり
言われてみると どんな仕組みなんだろうね?
役割
若木 しげる
Linux 上のプログラムは 「プロセス(process)」という 単位で動いているよ
若木 みどり
1コマンドが1プロセスになるのかな?
若木 しげる
その場合がほとんどだけど そうとも限らないんだ 並列処理を行っているような場合は 1コマンドで複数のプロセスが 動くこともあるよ
若木 みどり
データのまとまりの単位が 「ファイル」だとしたら プログラムの動きの単位が 「プロセス」なんだね
ps コマンド
若木 しげる
ps プロセスを確認できるよ process の略なんだ
ps [オプション]...
オプション役割
-e詳細情報を表示
-f自分が動かしていないプロセスも表示
若木 しげる
ここでは-e オプションを指定して実行しよう!
ps -e
若木 みどり
うん!
UID          PID    PPID  C STIME TTY          TIME CMD
midori      5173    5172  0 09:28 pts/0    00:00:00 -bash
midori      5632    5173  0 13:00 pts/0    00:00:00 ps -f
若木 しげる
この中で注目して欲しいのはPID, PPID, CMD の3つだよ
若木 しげる
CMD は「コマンド」の略でプロセスを動かしているプログラムの名前だね
若木 みどり
CMD はすぐにわかるね!
若木 しげる
PID は「プロセスID(process ID)」の略でプロセスを一意に識別する番号なんだ
若木 みどり
なるほど!sleep のプロセスが複数動いていてもPID でそれぞれを区別できるんだね!
若木 みどり
似たような名前に PPID があるね?
若木 しげる
PPID は「親プロセスID(parent process ID)」の略だよプロセスは親子関係があって親プロセスの PID が PPID になるんだ
親子関係
若木 みどり
プロセスに親子関係があるってどういうこと?
若木 しげる
プロセスは「フォーク(fork)」という仕組みで作られるんだ以下のような流れになるよ
  1. 元になるプロセス(親プロセス)が動いている
  2. 新しいプロセスを作るとき、親プロセスを「コピー」する
  3. コピーされたプロセスは、用途に応じて内容が書き換えられる
  4. 書き換えられたプロセスは、元のプロセスの「子プロセス」になる
若木 みどり
なるほど!シェルからコマンドを実行する場合そのコマンドはシェルの子プロセスになるんだね!
若木 しげる(笑顔)
飲み込みが早いねさっきの ps -fPPIDbashPID を見比べてみてごらん
若木 みどり(驚き)
あっ!同じ 4172 だ!ということは ps -f親プロセスは bash なんだね
pstree コマンド
若木 みどり
でも ps で PID と PPID を照らし合わせて探すのは大変だよ親子関係をもっと簡単に見れないのかな?
若木 しげる
pstreeプロセスの親子関係をツリー形式で表示するよ
pstree [オプション]... [PID|ユーザ名]
若木 しげる
pstree でプロセスの親子関係を見てみよう
pstree
若木 みどり
どれどれ?
systemd─┬─ ...
        ...
        ├─sshd───sshd───sshd───bash───pstree
        ...
若木 みどり(笑顔)
本当だ!bash の子どもとしてpstree が表示されたよこれなら親子関係が一発でわかるね!
まとめ
若木 みどり
今回はプログラムの動作単位「プロセス」プロセス確認コマンドps, pstree を学んだよ!
若木 みどり
でも…プロセスの親子関係は何のためにあるのかな?
若木 しげる
プロセスを効率的に管理するためなんだでもこの話をすると長くなりそうだから次回のプロセスを管理するコマンドで説明しよう