程式崩潰時螢幕會話終止

程式崩潰時螢幕會話終止

我正在螢幕會話中運行程序,如果程序崩潰,它會自行重新啟動,但是當程序崩潰時,螢幕會話將終止。

我希望螢幕會話保持開啟狀態,以便程式可以自行重新啟動。有什麼辦法可以做到這一點嗎?

我正在運行 Linux Debian 7 Wheezy

答案1

問題是,程式崩潰有多奇怪?我首先想到的兩件事:

  • 這個程式在最後一口氣時發出一些奇怪的控制序列,這些序列screen也會讓你崩潰/終止/認為最好不要讓你看到這個。
  • 程式向其父進程(screen或可能是中間進程)發送訊號) 終止它們。

我會嘗試的後續步驟:

  1. 終止的精確度如何screen?它會殺死整個screen進程還是只殺死它自己的視窗(並行運行的螢幕命令是否仍然存在,螢幕會話是否會分離)?
  2. 如果您從 shell 運行該程序,您可以捕捉訊號來自使用的程式陷阱
  3. screen如果您重定向它是否仍然終止標準輸出標準錯誤到一個文件(如果它不再崩潰,該文件包含什麼 - 我很好奇)。也許您仍然可以使用 來觀看程式運行tail -f
  4. 好的,規避不會提供有趣的見解,但是使用tmux代替時是否有相同的問題screen

編輯1(廣告1):崩潰的程式可以直接從螢幕運行,例如

screen /usr/local/bin/your/crashing/program

或在中間使用 shell 進程(例如,使用您最喜歡的 shell 啟動螢幕窗口,然後運行該程序,例如

screen
/usr/local/bin/your/crashing/program

或者有一個 shell 腳本可以用類似的方法重生

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 也會終止。如果您在 shell 中手動啟動程序,則該 shell 應在程式崩潰後再次顯示提示符號。如果在這種情況下螢幕視窗關閉,則確實有些奇怪。

了解一些迂迴的知識會很有幫助,例如如何啟動和重生程序。

相關內容