将正在运行的进程移至屏幕

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

有时我会在控制台上启动一个远程工作,稍后才会意识到它的运行时间比预期的要长。 (首先应该在Screen下启动一个…)

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

这怎么可能呢?

    看看reptyr ,这确实如此。 github页面有所有的信息。

    reptyr – “重新制作”程序的工具。

    reptyr是一个实用程序,可以将现有的正在运行的程序附加到新的terminal上。 通过ssh启动了一个长时间运行的进程,但是不得不离开而不想中断它? 只要开始一个屏幕,使用reptyr抓住它,然后杀死SSH会话,并回家。

    用法

    reptyr PID

    “reptyr PID”将会以PID的forms获取进程并将其附加到当前的terminal。

    附加之后,该过程将从新的terminalinput和写入输出,包括^ C和^ Z。 (不幸的是,如果你将其设置为背景,那么你仍然需要在旧的terminal中运行“bg”或者“fg”。

    你不能轻易做到这一点。 我build议把它作为一个开始屏幕的习惯,作为你打开控制台后的第一件事情。

    但是,对于您的实际问题,您还可以尝试另一个方法:在从terminal启动您的作业之后,通过键入ctrl-z然后bg 。 之后,将作业从它的父shell中分离出来; 在bash中,你会做disown -h %<jobid> 。 之后,您可以安全地closuresterminal,作业将继续运行。

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

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

    HTH

    干杯,