1. ホーム
  2. python

[解決済み] デーモン作成時にダブルフォークを行う理由は何ですか?

2022-02-09 12:53:17

質問

pythonでdaemonを作ろうとしています。私は 次の質問 しかし、なぜダブルフォークが必要なのかが気になります。しかし、なぜダブルフォークが必要なのかが気になります。

デーモンが制御端末を取得するのを防ぐためと書いてあるものもあります。2番目のフォークがなければ、どのようにこれを行うのでしょうか?どのような影響があるのでしょうか?

解決方法は?

質問で参照されているコードを見ると、正当な理由があるようです。

2番目の子プロセスをフォークしてすぐに終了し、ゾンビを防ぐ。 これは は、2番目の子プロセスを孤立させ、init プロセスはその後始末の責任を負います。 また、最初の子プロセスは 制御端末を持たないセッションリーダーであるため 将来的に端末をオープンすることで取得できる(System V ベースのシステム)。 この2番目のフォークによって、その子が デーモンがセッションリーダーを獲得することを防ぎます。 を制御する端末が必要です。

つまり、デーモンが init に再ペアレントされることを確実にし (デーモンをキックするプロセスが長生きする場合に備えて)、デーモンが制御用 tty を再取得する機会をなくすのです。そのため、この2つのケースに当てはまらない場合は、1つのフォークで十分です。 Unix ネットワークプログラミング - Stevens "にこれに関する良いセクションがあります。