有时我会在控制台上启动远程作业,后来才意识到它的运行时间比预期的要长得多。 (应该首先在Screen下启动该程序...)
我不想让我的工作站整夜运行只是为了保持VNC会话打开;我想将已经运行的远程作业移动到Screen会话中(在远程框中),这样我就可以关闭工作站的电源(并在第二天早上重新连接)。
如何做到这一点,如果有的话?
#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
评论
这是一个骗子,serverfault.com/questions/49877/…-似乎无法完成。superuser.com/questions/28568/screen-a-running-process
另请参阅如何放弃正在运行的进程并将其关联到新的屏幕外壳?。
是否可以复制/筛选已经启动的进程?
搜索screenify脚本。