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


222

在我的办公室工作中,通常会看到我通过VNC连接到Linux机器。

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

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

如果有的话怎么办?


2
这是一个骗子,serverfault.com / questions/ 49877/… -似乎无法完成。
Paul Dixon



3
scai

搜索screenify脚本。
Vashu

Answers:


217

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

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

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

用法

复数PID

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

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


22
如果像我一样,您查看了上面的链接并简要地考虑了从源代码安装该程序,请振作:apt-get在Debian系统上就不那么了。
mlissner 2014年

3
效果很好,以前我怎么没看过呢?
deed02392

3
这太棒了!如果可以的话,我将投票10次!另外,在RedHat仓库中也可以使用reptyr。只需“百胜安装”即可。
Mark J. Bobak '16

5
除了在最琐碎的情况下不起作用:Unable to attach. (This most commonly means that 11690 has a suprocesses)
Mehrdad

2
至少作为root用户,您可以使用reptyr -T PID
ChristophK

45

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

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


3
这对于我的情况非常有效。reptyr和retty都没有抓住这个过程,但是我所需要的只是能够关闭终端并使该过程继续运行。
STW 2013年

10
FYI:后不认 -ing过程可以reptyr内-ed 屏幕
亚当

1
这杀死了我正在运行的程序:(
Mehrdad

39

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

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

高温超导

干杯,


1
不知道雷蒂,谢谢。但是,对于我想到的那种长期运行的工作,我有点不愿意使用一种将自己称为“经过严格测试”的工具。我同意伯爵的解决方案。

1
看不到Gentoo的任何内容
Sergei

不能附加到4858
Arnold Roa
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.