サブプロセスをフォークした後でも、一部のプログラムのプロセスはまだ存在しますが、サブプロセスが新しいプロセスセッションを開始しないのはなぜですか?

サブプロセスをフォークした後でも、一部のプログラムのプロセスはまだ存在しますが、サブプロセスが新しいプロセスセッションを開始しないのはなぜですか?

以下は、特定のプロセスでデーモンを生成するいくつかのステップです。

  • 特定のプロセスは、子プロセスをフォークした直後に存在します。

  • 子どもたちは次のように電話をかけ、新しいセッションと新しいグループを開始します。setsid()

しかし、最初のステップだけがあり、2番目のステップはない場合があるようです。

2番目のステップなしで最初のステップだけを持つ目的は何ですか?

デーモン以外のものを生成したいものではありませんか?

ありがとうございます。

ベストアンサー1

高いレベルでは、その目的は提供されたbashの例で最も明白です。一般ユーザーが対話型bashシェルに入力した場合はlsどうなりますか?

  • バッシュフォーク
  • 子プロセスの実行ls
  • 完了すると、ls子プロセスは終了します。

デーモンはls(普通)とても早く終わるので愚かです。

また、奇妙なことは、シェルから分岐したすべてのプロセスが実行されることですsetuid()。これにより、通常のユーザーとしてシェルを実行できなくなります。

fork / execの使用に関する一般的な規則として、デーモンの詳細に依存しないでください。

おすすめ記事