Skip to content

Linuxプロセスの構造

Linux (UNIX)のプロセスにはいくつかの単位でまとまりがある。

名称説明
セッション端末(tty)に結びつくもの
ジョブパイプで繋いだ一連のプロセス
プロセス個別のプロセス
プロセスグループシグナルが届く範囲のグループ

端末はだいたい1つのウインドウまたはSSHにおけるログイン等が該当する。ウインドウや接続を閉じたとき、起動していたプロセスが全て終了するけれど、これは SIGHUP をセッションリーダーに送って、リーダーは子ジョブに SIGHUP を転送しているから。このため結果的に全部終了できる。

また、プロセスグループにはフォアグラウンドプロセスグループ(FPG)とバックグラウンドプロセスグループ(BPG)がある。FPGは必ずセッションごとに1つだが、BPGは複数存在する場合がある。Ctrl+Cを押したとき、カーネルはFPGに属するすべてのプロセスへ SIGINT を送る。

端末にアクセスできるプロセスはFPGに属するプロセスだけなので、BPGのプロセスが端末にアクセスするとFPGに復帰するまで待たされる。

Terminal window
$ (read a && echo $a) &
[1] 24818
[1]+ 停止 ( read a && echo $a )
$ fg
( read a && echo $a )
test # <- read aに入力した
test # <- echo $aの出力

端末を閉じてもプロセスを維持したい場合、ソースコードが手元にあるなら書き換えればいい。そうでなければ以下のコマンドが使える。

  • nohup
  • disown