it-swarm.cn

将已经在运行的进程移至Screen

我的办公室工作通常是让我通过VNC连接到Linux机器。

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

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

如果有的话怎么办?

232
DevSolar

看一看 reptyr ,它就是这样做的。 github页面包含所有信息。

reptyr-用于“重探”程序的工具。

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

用法

复数PID

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

附加后,该过程将从新终端接收输入并将输出写入新终端,包括^ C和^ Z。 (不幸的是,如果您将其作为背景,您仍然必须在旧终端中运行“ bg”或“ fg”。如果不修补您的Shell,则可能无法以合理的方式进行修复。)

229
DaveJohnston

您无法轻松做到这一点。我建议您养成一种习惯,即在打开控制台后首先要启动屏幕。

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

46
earl

当您使用Linux时,如何在新启动的屏幕过程中使用retty?

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

高温超导

干杯,

39
Rob Wells