我如何回收被放弃的进程?

我如何回收被放弃的进程?

与之前的许多问题类似,我发现自己正在运行一个我希望在屏幕上运行的作业。我被迫放弃该进程,因为我需要断开连接。现在我重新连接后,我看到该进程仍在运行。我如何“回收”该进程,以便我可以看到它的输出并为其提供输入?

这个问题不同于仅仅将正在运行的进程移动到屏幕上,因为它涉及重新打开丢失的 stdin/out/err 句柄。

答案1

这是一个重复的问题 - 请参阅将已运行的进程移至 Screen,指向雷蒂,这是一个自称为可怕的黑客攻击,实现了我一直猜测可能但从未真正尝试过的事情:它找到该进程的 fd 0、1 和 2(分别是标准输入、输出和错误)并附着在它们上面,就像一个不应该存在的可怕的异常寄生虫一样。

答案2

通过放弃进程所有权,您实际上是在说您希望它忽略终端发出的 SIGHUP。一旦您关闭会话(例如,bash),此进程将归 init 所有。因此,当您说在放弃所有权后想要重新拥有某个进程时,您是在说您想要从另一个进程手中夺走所有权——这并没有实现,而且有充分的理由。在 Linux 中,这根本无法优雅地实现。

答案3

您可以使用雷普特为了这:

./long-running-process &    # notice the PID
disown

reptyr pid-of-process

相关内容