スクリーンセッションでプログラムを実行していますが、プログラムがクラッシュすると自動的に再起動しますが、プログラムがクラッシュするとスクリーンセッションは終了します。
プログラムが自動的に再起動できるように、スクリーンセッションを開いたままにしたいです。解決策は何ですか?
私はLinux Debian 7 Wheezyを実行しています。
答え1
問題は、プログラムの競合がどのように奇妙ですか?私の心に最初に浮かんだ2つのこと:
- プログラムは最後の瞬間にいくつかの奇妙な制御シーケンスを投げて、
screen
ユーザーを衝突/終了/考えるようにし、それを見ないことが最善だと思います。 - プログラムは親プロセス(
screen
または中間プロセス)にシグナルを送信します。シェル)終了します。
私が試す次のステップは次のとおりです。
- シャットダウンはどのくらい正確ですか
screen
?プロセス全体screen
を終了しますか、それとも独自のウィンドウのみを終了しますか? - シェルでプログラムを実行すると、次のことができます。キャプチャ信号使用されたプログラムでは罠?
screen
リダイレクトしても終了しますか?標準出力そして標準エラーファイルに追加します(競合が発生しなくなった場合は、そのファイルに何が含まれているのか疑問に思います)。おそらくプログラムの実行を続けることができますtail -f
。- いいですね。バイパスは興味深い洞察を提供しませんが、
tmux
代替を使用しても同じ問題がありますかscreen
?
編集1(広告1):競合するプログラムは画面上で直接実行できます。
screen /usr/local/bin/your/crashing/program
または、途中でシェルプロセスを使用します(たとえば、好みのシェルで画面ウィンドウを起動し、プログラムを実行します。
screen
/usr/local/bin/your/crashing/program
または、再誕生を実行するシェルスクリプトがあります。
bash -c 'while true ; do /usr/local/bin/your/crashing/program ; done'
pstree
どのプロセスが関連しているかを出力から知ることができます。
xterm(309)---bash(311)---screen(230)---screen(231)---bash(234)-+-less(323)
`-pstree(322)
私の場合は、(309)ウィンドウの(311)でscreen
始まるもの(230と231)があり、別のもの(234)があり、ここで実行するもの(322と323)があります。bash
xterm
bash
pstree | less
子プロセスが終了すると、画面も終了します。これは通常の動作であり、競合ではありません。そのため、プログラムが画面から直接起動し、競合が発生すると画面も終了します。シェルでプログラムを手動で起動すると、プログラムがクラッシュした後にシェルにプロンプトを再表示する必要があります。この場合、画面ウィンドウが閉じると本当に奇妙なことが起こっています。
プログラムを起動して再起動する方法など、いくつかのことを知っておくと便利です。