我如何收回被拒绝的流程?


12

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

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


Answers:


6

这是一个重复的问题—请参阅将已经运行的进程移至Screen,它指向retty,这是一种自我描述的可怕黑客,实现了我一直猜测的可能,但从未真正尝试过:发现fd 0,1 ,以及2(分别为标准输入,输出和错误),并附加到它们上,就像不应该的可怕的异常寄生虫一样。


我对这个程序一无所知-尽管说实话,使用它不是一个好习惯!好的答案,无论如何。
Andrew M.

6

通过取消该过程,您实际上是在说您希望它忽略终端发出的SIGHUP。一旦关闭会话(例如bash),此过程将由init拥有。因此,当您说要放弃所有权后要重新拥有一个流程时,就是说要从另一个流程中撤走所有权-这是没有实施的,这是有充分理由的。在Linux中无法做到这一点。


1
进程并不完全拥有其他进程。未知的进程仍在按您的方式运行。
mattdm

家长会议关闭后,他们就会这样做(如他的问题所示)。我更新了答案以反映这一点。
Andrew M.

父进程更改为init,但这与所有权不同。进程的EUID和UID保留原始用户的身份。否则,这可能是可利用的,因为每个用户都会突然有一种方式可以像其他用户一样运行代码,而系统用户也是如此。
mattdm

1
EUID / UID!= PPID。我说的是流程所有权,而不是权限。
Andrew M.

是的,我认为除“过程所有权”一词的含义外,我们都同意。这是指与该进程关联的用户ID,而不是其父进程。也许混淆是由于disownbash特定的命令引起的,尽管它的名称如此,但实际上与更改进程所有权无关。
mattdm 2010年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.