プロセスをデーモン化するときに setsid() を使用するのはなぜですか?

プロセスをデーモン化するときに setsid() を使用するのはなぜですか?

作成するためにサービス (デーモン)親をフォークして終了させ、 を呼び出して子をセッション リーダーにしますsetsid()。 さらに、なぜ を使用するのsetsid()でしょうか。 孤立したプロセスは、(すべてのケースではありませんが) プロセスによって処理されますinit

なぜ を使用するのですか?と 処理信号setsid()の間には何らかの関係がありますか?setsid()SIGHUP

答え1

setsid()親を殺すだけでは子も殺されてしまうため、を使用しますsetsid()

新しいセッションを作成する呼び出しプロセスがプロセス グループ リーダーでない場合。呼び出しプロセスは、新しいセッションのリーダーであり、新しいプロセス グループのプロセス グループ リーダーであり、制御端末を持ちません。

親は最初のプロセス グループ リーダーであり、それを強制終了するか、セッション/ターミナルを強制終了するとグループが強制終了されるため、リーダーを切り替えます (その際に新しいセッションを作成します)。

関連情報