プロセス、プロセスグループ、(プロセスグループ)セッションはLinuxの概念です。
私の言葉が正しい場合は、bashシェルで開始されたプロセスグループをタスクと呼びます。
bashシェルで開始されたすべてのタスクは、正確に1つのセッションを形成しますか? 「正確」とは、それ以上でもそれ以下でもありません。
答え1
すべてのシェルプロセスではなく、1つだけログインシェルは新しいセッションを作成します(詳細は以下を参照)。最初に、セッションには明らかに1つのメンバー、つまりシェル自体しかありません。新しく分岐した各プロセスは、自動的に同じセッションに属します。プロセスはを使用して新しいセッションを作成して、セッションから自分自身を削除できますsetsid()
。プロセスがセッションを変更する他の方法はありません。
要約:
セッションメンバー=ログインシェル すべてのサブプロセス(およびそのサブプロセスなど) 独自のセッションの子プロセスを作成することに加えて
残りの質問は、シェルによって生成されたすべてのプロセスが常に「ジョブ」、つまりコマンドごとに1つのプロセスグループで始まるかどうかです。これは一般的に本当ですが、非対話型シェルに適用されるかどうかは不明です。
修正する
この質問はについてですが、bash
タスク制御機能を持つ他の同様のコマンドライン指向シェルでも同様です。
@StéphaneChazelasが指摘したように、セッションは端末または疑似端末装置ログインを管理するプログラムによって生成されます。セッションはその端末に厳密に関連しています。
ファイル内の対応するレコードから自分のシェルプログラムを決定するには、まずユーザーがログインする必要がありますpasswd
。シェルがexec
修正されました。 PID は変更されていません。したがって、ユーザーのログインシェルになるプロセス内でセッションが作成されます。