fork() (ないしfork()->execev()) すると、プロセスグループは親のものと同じになると思います。
しかし、ターミナルから実行したプロセスについては、sidは親のシェルと同じですが、pgidについては別のものとなっています。
targetはloop.pyプログラム
psAocommand,pgid,sid
1COMMAND PGID SID 2・・・ 3-bash 1092 1091 4python loop.py 1354 1091
間違いなく、親はbashであり、その子として実行されています。
psaxf
1 PID TTY STAT TIME COMMAND 2・・・ 31092 tty4 S 0:00 \_ -bash 41356 tty4 R 0:02 \_ python loop.py
これが意味するところは、シェルはfork() -> execev()の処理周りで、実行するプロセスを同セッション内で、別プロセスグループにしているという認識でよろしいでしょうか?(具体的にはsetpgid()のような関数を実行している?)
それにフォアグランドジョブやバックグラウンドジョブを一対一で対応付けることで、ジョブ制御を可能としていると
--追記
・シェルとひとまとめにしてしまいましたが、ここではジョブ制御ができないbourneシェル等ではなく、bashのようなシェルを想定しています。
・フォアグランドやバックグラウンドといった属性はtcsetpgrp()等で行うようです。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/12/01 05:40