流程重新父母:控制谁是新父母

neo*_*eye 8 unix fork process orphan process-reaper

新父母总是"初始化"还是有某种方法来控制谁成为新的父母

维基百科似乎表明它总是"初始化".我真的希望事实并非如此.我尝试过setpgid和setsid所能想到的一切,但没有运气.现在,我看到这篇维基百科文章,我需要建议.

在类Unix操作系统中,任何孤立的进程都将立即被特殊的init系统进程采用.此操作称为重新父级并自动发生.尽管从技术上讲,该进程将"init"进程作为其父进程,但它仍称为孤立进程,因为最初创建它的进程不再存在. 取自维基百科

我问的原因是因为我正在制作一个运行许多工作流程的Mac应用程序.我希望这些工作进程在任务管理器的进程层次结构中显示为主进程的子进程.一些工作者作为不同的用户运行,并且在Mac OS XI上需要分叉两次以将权限传递给子进程.因为我"双叉"工作人员目前作为守护人员运行,当与任务管理员一起查看时,我看到工作人员正在将"init"作为他们的父进程.

cni*_*tar 11

孤儿总是被收养init.无法Unix将父级更改为某些非初始化进程.


从Linux 3.4开始,这已不再严格.仍然没有可移植的Unix方式,但Andy Lutomirski指出Linux 3.4增加PR_SET_CHILD_SUBREAPERprctl.

实际上,subreaper履行init(1)其后代进程的角色.


And*_*ski 9

在Linux上,您可以使用PR_SET_CHILD_SUBREAPER来指示您的孤立后代应该重新为您而不是初始化.