1. ホーム
  2. unix

[解決済み] Unixのセッションとプロセスグループの使い方と意味?

2023-02-28 22:03:09

質問

UnixプロセスはセッションIDを持ち、プロセスグループに属しています。これはsetsid()/getpgrp()などの関数で変更/照会することができます。

しかし、プロセス グループとセッションの概念は、常に私には理解できませんでした。誰か、個別のセッションとプロセス グループを持つことがどのような意味を持つのか、新しいセッションを作成したり、同じセッションやプロセス グループに複数のプロセスを配置したりするのはなぜか、いつなのか、説明していただけないでしょうか。

どのように解決するのですか?

A プロセスグループ は、関連するプロセスの集まりで、一度にすべてシグナルを送ることができます。

A セッション はプロセスグループの集まりで、単一の端末デバイスに接続されているか (これは 制御端末 に接続されているか、どの端末にも接続されていないかのどちらかです。

セッションはジョブ制御に使用されます。セッション内のプロセスグループの1つはフォアグラウンドプロセスグループであり、端末制御文字で信号を送ることができます。 制御端末とのセッションは、その端末での "ログイン" に対応すると考えることができます。 (デーモンは通常、制御端末のない新しいセッションを作成することにより、制御端末との関連付けを解除します)。

を実行する場合、例えば some_app をシェルから実行すると、シェルはそのために新しいプロセスグループを作成し、 それをセッションのフォアグラウンドプロセスグループとします。 ( some_app はいくつかの子プロセスを作成するかもしれないが、 デフォルトではそれらは同じプロセスグループに属することになる)。 その後 ^Z , some_app のプロセスグループが停止するように合図され、 シェルのプロセスグループは再びフォアグラウンドのプロセスグループに切り替わる。 すると、例えば bg %1 が起動されると some_app のプロセスグループを再び起動し、バックグラウンドで実行し続けます。


POSIX.1-2008 標準 はかなり読みやすいものです (少なくとも、私はそう思っています!) 。 の定義を見てください。 の関連するセクションを見てください。 "一般端末インターフェース" の章を参照してください。