Reptyr – 将进程移动到另一个屏幕 Shell [Linux]

在 Linux 中,当运行一个需要很长时间的进程时,由于时间不够或需要回家而中途终止它可能会很痛苦。如果您以前遇到过这样的情况,那么您确实需要使用 Reptyr 工具。

Reptyr 工具是一种命令行实用程序,它从一个终端获取正在运行的进程并将其迁移到另一个终端。换句话说,它重复一个过程。这个名字也让人想起伪终端——通常缩写为“PTY”。如果您不知道的话,伪终端是一种允许两个进程(主进程和从进程)相互链接的工具。你在其中一个上写下的内容会反映在另一个上。

Reptyr 是如何工作的?

使用 Reptyr,您可以在工作中启动一个流程并在家里完成它(如果您使用的是 SSH)。还有其他与 Reptyr 工具类似的工具,例如 Screenify 和 Retty,您可能以前遇到过它们。然而,目前 Reptry 已被证明比其竞争对手更好。它的错误更少,而且效率更高。这些其他工具的问题是,即使迁移进程,进程的控制终端也不会改变。例如,如果您使用 Screenify,并尝试在新终端上使用“^c”或“^z”命令,它们将无法正常工作。这是因为它们是在当前拥有控制权的终端上执行的。如果您调整程序窗口大小或尝试“less” 命令,它也无法正常工作,因为 Linux 会被愚弄,认为您仍在旧终端上操作。

那么 Reptyr 到底是如何工作的呢?它针对我们希望使用 ptrace API 迁移的进程,打开一个新终端并使用“dup2”覆盖旧文件描述符。 Reptyr 与其他进程的不同之处还在于它改变了控制终端。您可以检查官方博客获取详细信息,但它基本上涉及操作 Linux 中的 ioctl、TIOCSCTTY 功能来更改控制进程。

安装

在基于 Ubuntu 的发行版中,您可以使用 apt-get 安装应用程序:

sudo apt-get install reptyr

使用 Reptyr 将进程移动到新屏幕

您还可以使用 Reptyr 以及 GNU Screen 软件应用程序(或类似的终端多路复用器应用程序)将进程移动到新的屏幕会话。例如,如果您有一个正在运行的进程并且需要重新启动服务器,您可以将其转移到新的屏幕会话,以便您可以在系统重新启动后再次访问它。听起来很有用,对吧?那么你到底是如何做到这一点的呢?

首先,您需要暂停需要迁移的进程。这可以通过不同的方式来完成——这完全取决于您正在运行的进程(主要是“^z”有效)。然后,在暂停之后,您需要在后台恢复该进程。这个命令,你不知道,是,

bg

接下来,您需要将子进程与父进程隔离。这是因为父进程将在重新启动期间终止,并且您需要防止子进程发生这种情况。为此,请使用 disown 命令:

disown name_of_process

然后您必须启动屏幕软件应用程序。它实际上是一个非常方便的工具 - 如果您没有它,也可以轻松下载。您可以使用以下命令启动它:

screen

现在您需要检索您尝试迁移的进程。请注意,您需要该命令正在运行的进程的 PID。或者,您可以使用“pgrep” 命令。如果您知道 PID,请键入:

reptyr PID

如果您不知道 PID:

reptyr $(pgrep name_of_process)

你就完成了!您现在可以在不终止进程的情况下注销会话。

回顾

$ ctrl+z                # Suspend the current process
$ disown <your process name>          # Detach process from the shell
$ screen                # Launch screen
$ reptyr $(pgrep irssi) # Get back the process</your>

Reptyr 是开源且完全免费的。它很容易设置和使用,所以请继续尝试一下。我相信你会发现它非常方便。

图片来源:科技地带,姆泰林@Flickr