/etc/inittab respawn すでに実行中のプロセス、Debian9

/etc/inittab respawn すでに実行中のプロセス、Debian9

/etc/inittabバイナリを再生成するためにantryを追加しました。項目は次のとおりです。

id:2:respawn:/path-to-my-bin

その後、実行すると、init qプロセスが起動しますinittab。プロセスを終了すると再生成されます。

質問

以下を実行すると、奇妙な動作が発生します。

  1. 手動で実行/path-to-my-binary
  2. 上記の項目を次に追加してください。/etc/inittab
  3. 走るinit q

結果:プロセスがすでに実行されていても再生成されます。

また、バイナリがinit.d起動時に実行レベル2で実行されるように設定されている場合、inittab起動時にすぐに再生成されます。

ベストアンサー1

簡単な答えは:しないでください。

構成に従ってプロセスを処理するには、/etc/inittab手動でまたは他の場所でプロセスを開始しないでください。

initそのコマンドがの項目と一致する場合、既存のプロセスは確認されませんinittab。子プロセス、つまりinit独自に開始されたプロセスのみを監視します。
を実行すると、init qプロセスinitは(まだ)その行のプロセスを開始していないことを知って起動id:2:respawn:/path-to-my-binします。


残念ながら、これが明示的にどこで指定されたのかは不明です。
私にとっては、これが本当であることは明らかであり、その理由は次のとおりです。

  1. init子プロセスが終了したら、シグナルを受け取り、プロセスの状態を特定し、仕様を確認し、必要に応じてinittabプロセスを再開できます。これはイベントベースです。関連のないプロセスでは不可能であるため、initすべてのプロセスを確認する必要があります。世論調査かもしれません。
  2. init行の1つと同じコマンドを実行する別のプロセスの目的が何であるかわかりませんinittab。プロセスの2番目のインスタンスを実行することは、望ましい動作である場合とそうでない場合があります。
  3. initすでにインスタンスを起動してからプログラムを手動で起動した場合はどうすればよいですか?によって開始されたプロセスが後で終了した場合はどうなりますか?それとも、後で他のプロセスが終了する可能性がありますか?initinittabinittab

未解決の質問が多いため、init子プロセスだけを処理し、関連のないプロセスは無視するのが当然です。

おすすめ記事