将已运行的进程移至 Screen

将已运行的进程移至 Screen

我在办公室工作时经常需要通过 VNC 连接到 Linux 机器。

有时我在控制台上启动远程作业,后来才意识到它运行的时间比预期的要长得多。(首先应该在 Screen 下启动它……)

我不想只是为了保持 VNC 会话打开而让我的工作站整夜运行;我想将已经运行的远程作业移动到 Screen 会话中(在远程框上),这样我就可以关闭工作站(并在第二天早上重新连接)。

如果可以的话,该如何实现这一点呢?

答案1

看一下雷普特,它的作用正是如此。github 页面上有所有信息。

reptyr——用于“重新安装”程序的工具。

reptyr 是一个实用程序,用于获取正在运行的现有程序并将其附加到新终端。通过 ssh 启动了一个长时间运行的进程,但必须离开并且不想中断它?只需启动一个屏幕,使用 reptyr 抓取它,然后终止 ssh 会话并返回主页。

用法

复制程序 PID

“reptyr PID”将抓取 id 为 PID 的进程并将其附加到您当前的终端。

连接后,该进程将从新终端获取输入并将输出写入新终端,包括 ^C 和 ^Z。(不幸的是,如果您将其置于后台,您仍然必须在旧终端中运行“bg”或“fg”。如果不修补您的 shell,这很可能无法以合理的方式修复。)

答案2

您无法轻易做到这一点。我建议养成习惯,在打开控制台后做的第一件事就是启动屏幕。

但是,对于您的实际问题,您可以尝试另一件事:从终端启动作业后,通过键入 ctrl-z 然后将其置于后台bg。之后,将作业与其父 shell 分离;在 bash 中,您可以执行disown -h %<jobid>。之后,您可以安全地关闭终端,作业将继续运行。

答案3

既然你正在使用 Linux,那么使用雷蒂新推出的屏幕流程是怎样的?

$ screen -S my_process
$ retty $(pgrep my_process)
/redraw

相关内容