普通のlinuxプログラミングという書籍に、
デーモン化するコードがあり、
fork()をかませる理由としては、"確実にsetsid()を完了させるため"程度の解説となっており、
いまいち理解ができなかったため、自分なりに調べて、理解を整理しました。
その理解が合っているか確認をしたいと思います。
一般的daemon()関数を使用しない場合は下のような工程を踏むと学びました。
// 現プロセスをdaemon化させる流れ n = fork(); // デーモン対象となる子をまず作成 if (n != 0){ exit_(0); // 上fork()したプロセスを生かす代わりに自分は終了 } setsid(); ・・・ n = fork(); // ★
★の点のfork()をかませる理由としては以下のような説明で大筋としてあっていますでしょうか?
前提
・セッションリーダーが代表して、制御端末と結びつく。
・セッションリーダーのセッションに属するプロセスは標準入出力について、セッションリーダーが結びついている制御端末を共有(利用)する。
・一つのセッション内に複数の制御端末が存在することは許されていない。
・seid()でセッションリーダー&プロセスリーダーになった時点では、まだ制御端末との結び付きはない。
・結びつきがない状態で何かシェルを立ち上げたりすると、自動で制御端末と結びつけられることがある。
以上から、
新しいセッション、プロセスグループを作成し、一旦それを_exit()し、その後にfork()してやることで、
◇全く新しいセッション
◇リーダーではない
という状態が約束される。
これらにより、絶対に制御端末が結びつくことはない、完全にいかなるプロセスからも独立したプロセスが出来上がる。
それをデーモンプロセス(==孤児プロセス)として利用する。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/11/28 00:10
2022/11/28 00:36 編集