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

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

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

如何做到这一点,如果有的话?

评论

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

superuser.com/questions/28568/screen-a-running-process

另请参阅如何放弃正在运行的进程并将其关联到新的屏幕外壳?。

是否可以复制/筛选已经启动的进程?

搜索screenify脚本。

#1 楼

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


reptyr-用于“重新侦听”程序的工具。

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

使用方法

reptyr PID

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

附加后,该过程将
来自新的
终端的输入并将其写入新的
终端,包括^ C和^ Z。
(不幸的是,如果将其作为背景,
您仍然必须运行“ bg”或
旧终端中的“ fg”。这是
如果不修补您的
shell,就不可能以合理的方式修复。)


评论


如果像我一样,您查看了上面的链接,并简要地考虑了从源代码安装该程序,请振作起来:这只是在Debian系统上的捷径。

– mlissner
2014年10月30日在9:31

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

–deed02392
15年11月18日在9:45

这太棒了!如果可以的话,我将投票10次!另外,在RedHat存储库中也可以使用reptyr。只需“百胜安装”即可。

– Mark J. Bobak
16-09-16在20:00

除非在最简单的情况下,否则不起作用:无法附加。 (这最通常意味着11690具有suprocesses)

–user541686
17年8月13日在0:41

至少以root身份可以使用reptyr -T PID

– ChristophhK
17年12月14日在14:25

#2 楼

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

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

评论


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

– STW
13-12-28 at 0:36

仅供参考:取消该过程后,可以在屏幕内进行复制。

–亚当
2014年6月9日在16:26



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

–user541686
17年8月13日在0:49

#3 楼

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

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


HTH

欢呼声,

评论


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

–DevSolar
09年8月18日在13:08

在Gentoo中看不到任何东西

–谢尔盖
15年6月16日在8:48

无法连接到4858

–阿诺德·罗阿(Arnold Roa)
16年1月15日在20:23