题 将已经运行的进程移动到Screen


我的办公室工作经常看到我通过VNC连接到Linux机箱。

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

我不想让我的工作站一夜之间运行只是为了保持VNC会话开放;我想将已经运行的远程作业移动到屏幕会话(在远程盒子上),这样我就可以关闭工作站(并在第二天早上重新连接)。

如果有的话,怎么办呢?


205
2017-08-18 11:03




这是一个骗局, serverfault.com/questions/49877/...  - 似乎无法完成。 - Paul Dixon
superuser.com/questions/28568/screen-a-running-process - warren
另见 如何拒绝正在运行的进程并将其关联到新的屏幕shell?。 - dma_k
可能重复 我可以nohup /屏幕已经启动的进程吗? - scai
搜索screenify脚本。 - Vashu


答案:


看一下 reptyr,这正是如此。 github页面包含所有信息。

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

reptyr是一个实用程序   现有的运行程序和附加   它到一个新的终端。开始了   在ssh上长时间运行的过程,但是   不得不离开,不想   打断它?刚开始使用屏幕   reptyr抓住它,然后杀死它   ssh会议并回家。

用法

reptyr PID

“reptyr PID”将抓住这个过程   使用id PID并将其附加到您的   现在的终端。

附件后,该过程将采取   输入和写入输出到新   终端,包括^ C和^ Z.   (不幸的是,如果你背景,   你仍然需要运行“bg”或   老终端的“fg”。这是   可能无法修复   没有修补你的合理方式   贝壳。)


192
2018-06-28 09:25



如果像我一样,你看了上面的链接,并简要地考虑从源代码安装程序,请记住:它只是一个 apt-get 离开Debian系统。 - mlissner
这很好用,我以前怎么没见过这个? - deed02392
这太棒了!如果可以的话,我会投票10次!另外,reptyr也可以在RedHat repos中使用。只需'yum install'即可获得它。 - Mark J. Bobak
除了在最微不足道的情况下不起作用: Unable to attach. (This most commonly means that 11690 has a suprocesses) - Mehrdad
至少作为root,你可以使用 reptyr -T PID - ChristophK


你不能轻易做到这一点。我打算把它作为开启控制台后开始屏幕的习惯。

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


42
2017-08-18 11:11



这对我的情况非常有效。 reptyr和retty都未能抓住这个过程,但我所需要的只是能够关闭一个终端并使该过程继续运行。 - STW
仅供参考:之后 认 - 它可以是一个过程 reptyr在里面 屏幕。 - Adam
这杀了我正在运行的程序:( - Mehrdad


当你使用Linux时,在新推出的屏幕进程中使用retty怎么样?

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

HTH

干杯,


37
2017-08-18 12:09



不知道retty,谢谢。但是,对于我想到的那种长期工作,我有点不愿意使用一种工具,称自己为“非常轻微的测试”。我选择了伯爵的解决方案。
在Gentoo看到没有retty - Sergei
无法附加到4858 - Arnold Roa