Bash/ZSH:撤消“拒绝”

nis*_*isc 32 bash zsh shell

有没有办法在进程被“否认”后将进程“重新附加”到 shell 作业表?

编辑:$SEARCHENGINE 完全让我失望。看起来不太好。

小智 19

虽然我认为这不会在不幸的情况下对错误的流程有所帮助,但如果您要从工作流程中消除不认同并将其替换为:

https://github.com/nelhage/reptyr

您将能够重新设置任何进程(即在屏幕内移动它)。

  • 好吧,我用 reptyr 找回了我被否认的 vim 进程,所以它就像我正在寻找的未被否认的实用程序一样工作。 (2认同)

lor*_*nix 17

考虑到 linux 作业和流程所有权的工作方式,如果没有采用流程的帮助,恐怕很难重新拥有流程。

父母可以“否认”一个孩子,然后由名为“init”的进程“采用”。系统安全可防止某人抢占其他人的进程。当你否认它时,一个进程就变成了其他人(init)的控制权。您作为“用户”仍然可以终止该进程,但您无法将其恢复。试图强制 init 返回您的进程不太可能奏效,因为 init 甚至不读取邮件。

尽管听起来很刻薄,但实际上归结为“不要那样做!”的答案。

  • 抱歉,这个答案是错误的。只需使用“reptyr”(有关使用示例,请参阅我的答案)。 (2认同)

Chr*_*sch 12

您只需要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
Run Code Online (Sandbox Code Playgroud)

  • (sudo apt-get install reptyr)然后在第一次尝试时得到这个:“附加时内核拒绝了权限。如果您的 uid 与目标匹配,请检查 /proc/sys/kernel/yama/ptrace_scope 的值。有关更多信息,请参阅/etc/sysctl.d/10-ptrace.conf”我将两个位置的值从 1 更改为 0 并且它起作用了。我以同一用户(ubuntu 14.04 LTS 上的 ipython notebook)测试了一个进程的 disown 和 reptyr。也许这对于在隔离环境中的开发来说是可以的……但是不确定更改的最终安全后果。也许有专业知识的人可以插话。 (2认同)