init.dで起動すると、アプリケーションが遅延しますか?

init.dで起動すると、アプリケーションが遅延しますか?

Linuxで手動で起動すると、正しく実行されるプログラム(事前にコンパイルされたバイナリ)があります。コマンドの入力に使用するCLIがあります。このプログラムはソフトウェアルータで、CLIに接続して設定を調整できます。

ただし、起動時に起動しようとすると、プログラムが遅すぎて実行できなくなります。たとえば、画面に印刷される情報がある場合は、転送速度が遅くなるように塊として印刷されます。私が入力するすべてのコマンドはこのように発生し、情報が非常に遅く印刷されます。

S99などを使用してinit.dを実行するのではなく、起動後に手動で実行するのとどのような違いがありますか?プロセスを停止して手動で再起動すると、正常に動作します。

このPythonスクリプトはinit.dから呼び出されます。

import subprocess
application_pidfile = "/var/run/application.pid"
command_line=["start-stop-daemon", "-q", "-p", application_pidfile, "-S",
              "-m", "-b", "-x", "/bin/application"]
subprocess.call(command_line)

ブートしてから1時間経っても、まだ遅い理由が何であるか疑問に思います。しかし、ただ停止して手動で起動すると、起動して数秒後にも正しく実行されますか?起動後数分後にこのプロセスを開始するなど、遅延を設定しても同じ問題が発生します。

遅い「ソケット」モードなどで始まりますか?

ベストアンサー1

最新のinitシステム(systemdやupstartなど)は複数の実行スレッドを実行し、raw initを使用しても起動中にジョブが分岐する可能性があります(システムで述べたように)。

これは、プロセスが他のプロセスと同時に実行され、すべての出力がその出力とインターリーブされることを意味します。

   Process 1 says "I'm here"
   Process 2 says "I'm here"
   Process 1 says "Doing my thing..."
   Process 3 says "I'm here"
   Process 3 says "Doing my thing..."
   Process 1 says "Still busy..."
   Process 2 says "Doing my thing..."

ここの順序は開始優先順位を超えてランダムに指定されS05ます。スタートしかし、あるS70プロセスの完了が他のプロセスの特定の前提条件でない限り、互いに相対的に完了する時点は不確実である。

スレッドプログラミングをしたことがある場合は、この競馬に精通しています。プロセスは同時に実行されるため、順番にインターリーブされません。したがって、この例では、Process 3以前に開始されたプロセスが同じタスクを実行する前に複数のタスクを実行する必要があります。など。それはただ偶然であり、毎回同じではありません。

起動はシステムが忙しい時間です- 同時に多くのことが活発に起こっています。したがって、実行時間を後でプロセス自体を実行することと比較すると、後者の場合、他のアクティブプロセスと競合する必要がないため、多くの(またはより重要なことにはすべて)、速度が遅くなります。

おすすめ記事