以下は、特定のプロセスでデーモンを生成するいくつかのステップです。
特定のプロセスは、子プロセスをフォークした直後に存在します。
子どもたちは次のように電話をかけ、新しいセッションと新しいグループを開始します。
setsid()
しかし、最初のステップだけがあり、2番目のステップはない場合があるようです。
2番目のステップなしで最初のステップだけを持つ目的は何ですか?
デーモン以外のものを生成したいものではありませんか?
ありがとうございます。
答え1
高いレベルでは、その目的は提供されたbashの例で最も明白です。一般ユーザーが対話型bashシェルに入力した場合はls
どうなりますか?
- バッシュフォーク
- 子プロセスの実行
ls
- 完了すると、
ls
子プロセスは終了します。
デーモンはls
(普通)とても早く終わるので愚かです。
また、奇妙なことは、シェルから分岐したすべてのプロセスが実行されることですsetuid()
。これにより、通常のユーザーとしてシェルを実行できなくなります。
fork / execの使用に関する一般的な規則として、デーモンの詳細に依存しないでください。