プログラムがクラッシュするとスクリーンセッションが終了する

プログラムがクラッシュするとスクリーンセッションが終了する

Screen セッションでプログラムを実行している場合、プログラムがクラッシュするとプログラムは自動的に再起動しますが、プログラムがクラッシュすると Screen セッションは終了します。

プログラムが自動的に再起動できるように、画面セッションを開いたままにしておきたいのですが、その方法はありますか?

私はLinux Debian 7 Wheezyを実行しています

答え1

問題は、プログラムがクラッシュする現象がどの程度奇妙なのかということです。まず頭に浮かぶのは、次の 2 つです。

  • プログラムは最後の息を吐くときに、screenクラッシュ/終了/ユーザーにこれを見せない方が良いと考えるような奇妙な制御シーケンスを送信します。
  • プログラムは親プロセス(screenまたは中間プロセス)にシグナルを送信しますシェル) によって終了します。

次のステップとして、次のことを試します。

  1. どのくらい正確にscreen終了するのでしょうか? プロセス全体を強制終了するのscreenか、それとも自身のウィンドウだけを強制終了するのか (並行して実行されている screen コマンドはまだ有効ですか、screen セッションは切断されますか)?
  2. シェルからプログラムを実行すると、信号をキャッチするプログラムから使用トラップ?
  3. screenリダイレクトしても終了するのでしょうか?標準出力そして標準エラー出力ファイルに (クラッシュしなくなったらファイルには何が含まれるのか、興味があります)。 を使用すると、プログラムの実行をまだ監視できるかもしれませんtail -f
  4. 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)を実行しました。bashxtermbashpstree | less

子プロセスが終了すれば、Screen も終了します。これは正常な動作であり、クラッシュではありません。したがって、プログラムが screen で直接起動されてクラッシュすると、screen も終了します。プログラムをシェルで手動で起動した場合、プログラムがクラッシュした後、そのシェルは再びプロンプトを表示します。この場合、screen ウィンドウが閉じる場合、実際には何かがおかしいです。

プログラムを起動して再起動する方法など、回り道を少し知っておくと役に立ちます。

関連情報