そうでない場合、いつ不一致が発生しますか?
(私は彼らの同意を得ることができません。)
SID共有プロセスには他にどのような特性がありますか?いつも共有する?
答え1
セッションには、プロセスを含むプロセスグループが含まれます。
これは主に端末作業制御のために行われた。セッションは通常、端末のログインセッションまたは端末エミュレータのフルシェルセッションに関連付けられます。
ログインまたは起動すると、新しいxterm
プロセスが作成され、そのプロセスが新しいセッションを開始し(自動的に新しいプロセスグループを開始します)、そのプロセス(現在のセッションリーダーとプロセスグループリーダー)がログインシェルを実行します。 O_NOCTTY を使用せずに端末装置を開くと、プロセスは端末装置をセッションに関連付けます。制御プロセスターミナル)。端末装置は制御端子これはセッションのすべてのプロセスです。
その後、シェルは独自のプロセスグループで各タスクを実行し(新しいプロセスグループを開始するプロセスを分岐し、最終的にそのグループの他の複数のプロセス(cmd1 | cmd2
パイプラインなど)を分岐できます)、ioctl()s
端末で特別なタスクをします。どのタスクが前景にあるかを知らせるデバイスです(たとえば、端末でI / O操作を実行し、CTRL-Cを介してSIGINTを受信できます)。
はい。通常、セッションごとに複数のプロセスグループがあります。
たとえば、対話型シェルでは次のようになります。
$ sleep 1 | sh -c 'sleep 2; :' & ps -j
[1] 2902 2903
PID PGID SID TTY TIME CMD
2902 2902 4648 pts/23 00:00:00 sleep
2903 2902 4648 pts/23 00:00:00 sh
2904 2904 4648 pts/23 00:00:00 ps
2905 2902 4648 pts/23 00:00:00 sleep
4648 4648 4648 pts/23 00:00:00 zsh
3つのプロセスグループ、1つは前景(ps
)、1つは背景、3つのプロセス(sleep
、、、 ) sleep
、sh
および対話型シェルです。
プロセスグループ内のすべてのプロセスは同じセッションになければなりません。新しいセッションを作成すると(プロセスグループリーダーの場合はこれを実行できません)、自動的に新しいプロセスグループが作成されるためです。
私は読書をお勧めします
info libc 'Job Control'
詳しくはGNUシステムをご覧ください。