プロセス共有SIDは*常に* PGIDを共有するという意味ですか?

プロセス共有SIDは*常に* PGIDを共有するという意味ですか?

そうでない場合、いつ不一致が発生しますか?

(私は彼らの同意を得ることができません。)

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、、、 ) sleepshおよび対話型シェルです。

プロセスグループ内のすべてのプロセスは同じセッションになければなりません。新しいセッションを作成すると(プロセスグループリーダーの場合はこれを実行できません)、自動的に新しいプロセスグループが作成されるためです。

私は読書をお勧めします

info libc 'Job Control'

詳しくはGNUシステムをご覧ください。

関連情報