程序崩溃时屏幕会话终止

程序崩溃时屏幕会话终止

我正在屏幕会话中运行一个程序,如果程序崩溃,它会自行重新启动,但是当程序崩溃时,屏幕会话将终止。

我希望屏幕会话保持打开状态,以便程序可以自行重新启动。有什么办法吗?

我正在运行 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 应在程序崩溃后再次显示提示符。如果在这种情况下屏幕窗口关闭,则确实有些奇怪的事情。

了解一些迂回的知识会很有帮助,例如如何启动和重生程序。

相关内容