他のプロセスが強制終了しようとしているプロセスがあり、それらがそれを実行できた場合、そのプロセスが再び実行されることを確認するにはどうすればよいですか?
5 に答える
inittabを確認してください。リスポーンを探してください:)
プロセスは終了するたびに再起動されます
以下は、私自身の inittab の例です。
c1:2345:respawn:/sbin/agetty -8 38400 tty1 linux
c1
は ID (一意である必要があります)、これ2,3,4,5
が適用されるランレベル、respawn は前に述べたことを示し、残りはコマンドです。そこにコマンドを追加するだけで、うまく機能するはずです。
から再生成できinittab
ますが、プロセスを再起動するタイミングと方法をほとんど制御できません。再生成を停止するには、inittab を編集する必要があります。また、inittab の再生成は、大量の CPU または RAM リソースを消費している、ロックされたプロセスや暴走したプロセスについては何もできません。また、プロセスが 2 秒ごとに再起動されていることも通知されません。
プロセス監視デーモンを使用して、追加の機能と柔軟性を得ることができます。監視デーモンを使用すると、複雑な動作をプロセス制御に任意に追加できます。もちろん、要求をやりすぎると、独自のデーモンを作成しなければならなくなる可能性があります。
ニーズに合った既存のソリューションを使用することをお勧めします。
Monitで良い結果が得られました。構成言語は非常に強力で、必要に応じてかなり複雑なことを行うことができます。プロセスをリモートで停止、開始、および無効化できる Web インターフェイスを有効にすることもできます。概要については、プレゼンテーションをご覧ください。
信号処理は信号によって異なります。ほとんどのシグナルはターゲット プロセスに到達し、そこでシグナル ハンドラーがそれを処理できます。たとえば、kill
通常送信される SIGTERM です。kill -sigkill
(またはkill -9
、それらは同等です) が使用されている場合、シグナルはプロセスに到達しません。プロセスは、OS にとって安全な方法でできるだけ早く強制終了されます (システム コールでビジー状態の場合、カーネルで実行されているスレッドの強制終了として、システム コールが終了するとすぐに強制終了されます)。モードは、ロックが解除されていない場合などに OS をクラッシュさせる可能性があります)。
したがって、プログラミング言語に関係なく、プロセスが SIGKILL からブロックまたは回復する方法はまったくありません。
一部の Linux バージョン (Ubuntu など) では、inittab ではなく /etc/event.d が優先されます。コンセプトは似ていますが、実装が異なります。
いつでもRobin Hood/Friar Tuckをプルできますが、最近では両方のプロセスを同時に kill できます。