Linuxプロセスの構造
Linux (UNIX)のプロセスにはいくつかの単位でまとまりがある。
| 名称 | 説明 |
|---|---|
| セッション | 端末(tty)に結びつくもの |
| ジョブ | パイプで繋いだ一連のプロセス |
| プロセス | 個別のプロセス |
| プロセスグループ | シグナルが届く範囲のグループ |
端末はだいたい1つのウインドウまたはSSHにおけるログイン等が該当する。ウインドウや接続を閉じたとき、起動していたプロセスが全て終了するけれど、これは SIGHUP をセッションリーダーに送って、リーダーは子ジョブに SIGHUP を転送しているから。このため結果的に全部終了できる。
また、プロセスグループにはフォアグラウンドプロセスグループ(FPG)とバックグラウンドプロセスグループ(BPG)がある。FPGは必ずセッションごとに1つだが、BPGは複数存在する場合がある。Ctrl+Cを押したとき、カーネルはFPGに属するすべてのプロセスへ SIGINT を送る。
端末にアクセスできるプロセスはFPGに属するプロセスだけなので、BPGのプロセスが端末にアクセスするとFPGに復帰するまで待たされる。
$ (read a && echo $a) &[1] 24818[1]+ 停止 ( read a && echo $a )
$ fg( read a && echo $a )test # <- read aに入力したtest # <- echo $aの出力端末を閉じてもプロセスを維持したい場合、ソースコードが手元にあるなら書き換えればいい。そうでなければ以下のコマンドが使える。
- nohup
- disown