GNU Screen 手册说:
当程序终止时,
screen
(默认情况下)会关闭包含该程序的窗口。
建议(per default)
您可以更改此选项,以便程序终止时不会关闭其所在的窗口。如何更改此行为?
答案1
尝试使用zombie
或defzombie
。我正在使用以下设置。
# don't remove windows from the window list as soon as window process exits.
zombie kr # k: destory window, r: resurrect window
答案2
当窗口正在运行的程序退出时,窗口screen
也会退出。这是因为 screen 本身不是 shell,所以一旦程序退出,窗口就无法再执行任何操作。您无法启动新程序,因为该终端会话下没有任何可以启动程序的内容。
新创建的 screen 窗口默认运行 bash(或您指定的任何 shell)。由于 bash 是一个 shell,您可以从中启动任意数量的程序,当它们退出时,它们将返回到 bash。然后可以启动另一个程序。因此,运行 bash 的窗口将按照您描述的方式运行。只有当 bash 本身退出时,窗口才会关闭。
请注意,这与任何终端会话的行为相同,一旦最后一个程序退出,终端会话就结束(使用正常终端,如果由 init 设置为,则此会话将重新生成,然后会显示登录屏幕)。
这有点不合常理,但通常情况下,当您使用命令启动 screen 时,命令完成会结束窗口。但是,如果您还使用该-c
选项使用命令启动 bash,则命令退出后 bash 也会退出。
因此,如果我们希望 bash 运行一个命令,但在命令结束后继续运行,我们需要将该命令作为 bash 初始化过程的一部分来运行。
例如,如果您创建一个新文件“startserver1”,其中包含启动服务器所需的命令:
#start the server
ls -la
然后使用 bash 运行 screen,使用 startserver1 文件进行初始化:
screen bash --init-file startserver1
这将调用 screen,启动 bash,使用服务器启动脚本初始化 bash。服务器结束后,您将留在 screen 窗口内的 bash 会话中。
答案3
我建议先用“shell”启动屏幕,然后运行命令,这样当它完成后,您将返回到屏幕内的 shell 并可以看到命令的输出。(您可能需要禁用 shell 的自动注销功能,以避免它在一段时间后关闭)
否则,我再次阅读了屏幕的手册页,但找不到在主命令完成后保持窗口打开的其他选项。