起動時間を短縮するためにinitスクリプトを実行してバックグラウンドでデーモンを起動しますか?

起動時間を短縮するためにinitスクリプトを実行してバックグラウンドでデーモンを起動しますか?

私はシングルコア組み込みLinuxシステムの起動時間を短縮する方法を探しています。一部のカスタムデーモンは、起動時に顕著な遅延を経験します。一度起動すると、バックグラウンドで実行されますが、実行プロセスに長い時間がかかります。

##This takes long during startup
##In file /etc/init.d/run_custom_daemon
...
/opt/bin/custom_daemon -d
...

デーモンの先頭をバックグラウンドに置くと、起動時間が短くなることがわかります。

##This takes much less but is it a real gain?
##In file /etc/init.d/run_custom_daemon
...
/opt/bin/custom_daemon -d &
...

ログイン画面に到達するのにかかる時間だけに興味がある人には、これがスピードアップのように見えます。しかし、これは単なる見た目の改善であり、起動シーケンスの次のプロセスでデーモンが起動時に実行されると予想している場合は問題を引き起こす可能性があると思います。

これは正しい仮定ですか?

答え1

通常、デーモンは親プロセスが終了する前に2〜3回分岐します。デーモンがbgで始まると、非対話型シェルは最初のフォークが終了するのを待ちません。何の関係もないのですぐに終了します。これにより、作業が少し速くなる可能性があります。デーモンが失敗しないと確信しているなら、これは悪い結果をもたらすとは思わない。

フォークを削除して速度を上げるには、次のように「exec」できますexec daemon。しかし、 'bg'と 'exec'はデーモンの戻り値を取得できません。

「init」またはinitによって生成されたいくつかのエージェントがいくつかのシェル魔法でそれを知るときに実行する次のinitスクリプトが自己複製され、「next init scritp」を実行してexec [lv] *一連の関数が見つかります#! 「next init script」を引数としてインタプリタを実行すると、インタプリタは次のデーモンが始まるまで「next init script」を解析して実行し、カーネルは断続的にCPU時間を取得します。予想されます。 。

デーモンの最初のフォークは、2番目の「フォーク」システムコールの終了を確認して終了する以外は何もしません。他の人が最初のフォークで開いている「fd」を閉じて延期する代わりに、0、1、2で/ dev / nullを開くことができます。一部のベンチマークはパフォーマンスをある程度明らかにすることができます。

関連情報