私はダブルフォークを理解しようとしていて、この質問をここで偶然見つけました。多くの研究の後、これは私が考え出したものです。うまくいけば、それは同じ質問を持つ誰にとっても物事をより明確にするのに役立つでしょう。
Unixでは、すべてのプロセスがグループに属し、グループはセッションに属しています。これが階層です…
セッション(SID)→プロセスグループ(PGID)→プロセス(PID)
プロセスグループの最初のプロセスがプロセスグループリーダーになり、セッションの最初のプロセスがセッションリーダーになります。すべてのセッションに1つのTTYを関連付けることができます。セッションリーダーだけがTTYを制御できます。プロセスが本当にデーモン化される(バックグラウンドで実行される)には、セッションリーダーが強制終了され、セッションがTTYを制御する可能性がないようにする必要があります。
私は、UbuntuでこのサイトからSander MarechalのPythonサンプルデーモンプログラムを実行しました。これが私のコメント付きの結果です。
1. `Parent` = PID: 28084, PGID: 28084, SID: 28046
2. `Fork#1` = PID: 28085, PGID: 28084, SID: 28046
3. `Decouple#1`= PID: 28085, PGID: 28085, SID: 28085
4. `Fork#2` = PID: 28086, PGID: 28085, SID: 28085
プロセスがなDecouple#1
ので、後にセッションリーダーになることに注意してくださいPID = SID
。それでもTTYを制御できます。
Fork#2
はセッションリーダーではなくなりましたPID != SID
。このプロセスがTTYを制御することはありません。本当にデーモン化。
個人的に、2倍の用語で混乱していると思います。より良いイディオムはfork-decouple-forkかもしれません。
興味のある追加リンク: