フォークとシャットダウンはプロセスをデーモンにしますか?

フォークとシャットダウンはプロセスをデーモンにしますか?
int main()
{
    if (!fork()) sleep(3000);
    exit(0);
}

シェルから上記のプログラムを呼び出すと、孤立プロセスが作成されます。

  1. 採用initまたは採用upstart(私のUbuntuデスクトップから)
  2. シェルと同じセッションで
  3. 失われたチームリーダー
  4. シェルジョブ制御なしで管理、これは、シェルがSIGHUPを受信して​​もSIGHUPを受信しないことを意味します。

4 について: 私はbashこれを Ubuntu デスクトップでテストし、確認しました。これがSIGHUP以外の信号で動作するかどうかはわかりません。ジョブと同じ場合disownjobsコマンドでリストされていないプロセスグループはSIGHUPを受け取りません。

すべてのFDをオフにしてchdirファイルに書き込むこともできるので、このデーモンと通常のデーモンの唯一の違いは次のとおりです。

  1. 私のプロセスはまだシェルと同じセッションを共有しています。
  2. 私のプロセスには、示されているようにまだ "control tty"があります。ps j

だから私の質問は:このプロセスをデーモンと見なすことはできますか?

つまり、デーモンがsetsid()cttyなしで新しいセッション(call)にあるのはなぜそれほど重要ですか?これは、シェルが呼び出されたのと同じセッションとは関係がないためです(そうでない場合は訂正してください)。 ctty接続?

つまり、デーモンとして機能するプロセスがセッションをそのまま維持し、端末に接続され続けているのはなぜ悪いのですか(FDを閉じても)。

私はこれらの問題が本質的に同じだと思います。よろしくお願いします。

参考資料(ただし説得力がなかった)

ベストアンサー1

おすすめ記事