在某个进程被‘放弃’之后,有没有办法将它‘重新附加’到 shell 作业表?
编辑:$SEARCHENGINE 完全让我失望。看起来不太好。
答案1
考虑到 Linux 作业和进程所有权的工作方式,恐怕如果没有采用进程的帮助,就不可能真正重新拥有一个进程。
父进程可以“放弃”子进程,然后由名为“init”的进程“收养”。系统安全可防止有人抢占他人的进程。当您放弃某个进程时,该进程将由他人(init)控制。您作为“用户”仍可以终止该进程,但无法将其取回。试图强迫 init 归还您的进程不太可能奏效,因为 init 甚至不会阅读邮件。
尽管听上去很刻薄,但答案其实就是“不要那样做!”。
答案2
虽然我认为这对那些不幸放弃错误流程的人来说没有帮助,但如果你将放弃从你的工作流程中移除并用以下方式替换它:
https://github.com/nelhage/reptyr
您将能够重新设置任何进程的父级(例如,将其移动到屏幕内)。
答案3
你所需要的只是reptyr
。它存在于GitHub并且自 Wheezy 以来就已为 Debian 打包,可能也为其他 GNU/Linux 发行版打包。如果您使用进程 ID (PID) 调用它,它将在当前终端中突出显示您已放弃的进程。例如:
pgrep -f DISOWNED_PROCESS # to find out the PID of the disowned process
reptyr PID # insert this PID here
答案4
情况是怎样的?如果你只是想暂时恢复终端,你可以使用GNU 屏幕相反。它没有相当将进程从终端分离 - Screen 模拟一个终端以方便进程使用 - 但您可以将其连接到您正在使用的实际终端并分离。您甚至可以分离屏幕、注销,然后重新登录并重新连接到同一屏幕。