/etc/inittab
バイナリを再生成するためにantryを追加しました。項目は次のとおりです。
id:2:respawn:/path-to-my-bin
その後、実行すると、init q
プロセスが起動しますinittab
。プロセスを終了すると再生成されます。
質問
以下を実行すると、奇妙な動作が発生します。
- 手動で実行
/path-to-my-binary
- 上記の項目を次に追加してください。
/etc/inittab
- 走る
init q
結果:プロセスがすでに実行されていても再生成されます。
また、バイナリがinit.d
起動時に実行レベル2で実行されるように設定されている場合、inittab
起動時にすぐに再生成されます。
ベストアンサー1
簡単な答えは:しないでください。
構成に従ってプロセスを処理するには、/etc/inittab
手動でまたは他の場所でプロセスを開始しないでください。
init
そのコマンドがの項目と一致する場合、既存のプロセスは確認されませんinittab
。子プロセス、つまりinit
独自に開始されたプロセスのみを監視します。
を実行すると、init q
プロセスinit
は(まだ)その行のプロセスを開始していないことを知って起動id:2:respawn:/path-to-my-bin
します。
残念ながら、これが明示的にどこで指定されたのかは不明です。
私にとっては、これが本当であることは明らかであり、その理由は次のとおりです。
init
子プロセスが終了したら、シグナルを受け取り、プロセスの状態を特定し、仕様を確認し、必要に応じてinittab
プロセスを再開できます。これはイベントベースです。関連のないプロセスでは不可能であるため、init
すべてのプロセスを確認する必要があります。世論調査かもしれません。init
行の1つと同じコマンドを実行する別のプロセスの目的が何であるかわかりませんinittab
。プロセスの2番目のインスタンスを実行することは、望ましい動作である場合とそうでない場合があります。init
すでにインスタンスを起動してからプログラムを手動で起動した場合はどうすればよいですか?によって開始されたプロセスが後で終了した場合はどうなりますか?それとも、後で他のプロセスが終了する可能性がありますか?init
inittab
inittab
未解決の質問が多いため、init
子プロセスだけを処理し、関連のないプロセスは無視するのが当然です。