プログラムを(デーモンとしてではなく)フォアグラウンドで明示的に実行するか、または Upstart デーモンを構成するときに `expect fork` するべきでしょうか?

プログラムを(デーモンとしてではなく)フォアグラウンドで明示的に実行するか、または Upstart デーモンを構成するときに `expect fork` するべきでしょうか?

多くのプログラムは、デーモン モード (通常はデフォルト) で実行するか、 などのフラグを使用して明示的にフォアグラウンドで実行することができます-f

このようなプログラムを実行するようにUpstartを設定する場合、次のようにします。

exec foo -f # run in foreground

または

expect fork
exec foo # automatically runs as a daemon

どちらか一方を選択する理由はありますか? すべてをフォアグラウンドで実行し、Upstart にプロセスを処理させる方が簡単なように思えますが、それには欠点がありますか?

答え1

私はフォアグラウンドで実行することを強く好みます。そうすることで、デーモン化プロセスから生じる可能性のあるあらゆる複雑さ (upstart が長時間実行中のデーモン プロセスを見失うなど) を回避できます。唯一の例外は、デーモン化プログラムのごく一部で、これらのプログラムは「フォアグラウンドで実行してください」を「パフォーマンスの低いデバッグ モードで実行してください」と解釈し、1 つのスレッドだけを実行したり、子ワーカーを生成しないなどの愚かなことを行うという不快な習慣を持っています。

関連情報