程序终止后是否保持 GNU 屏幕窗口打开?

程序终止后是否保持 GNU 屏幕窗口打开?

GNU Screen 手册说:

当程序终止时,screen(默认情况下)会关闭包含该程序的窗口。

建议(per default)您可以更改此选项,以便程序终止时不会关闭其所在的窗口。如何更改此行为?

答案1

尝试使用zombiedefzombie。我正在使用以下设置。

# 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 的自动注销功能,以避免它在一段时间后关闭)

否则,我再次阅读了屏幕的手册页,但找不到在主命令完成后保持窗口打开的其他选项。

相关内容