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

时间:2011-06-25 07:14:22

标签: unix process fork orphan process-reaper

新父母总是“初学者”或是否有某种方法可以控制谁成为新的父母

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

  

在类似Unix的操作系统中   孤立的过程将立即进行   由特殊的init系统采用   处理。调用此操作   重新养育并自动发生。   即使在技术上这个过程   将“init”进程作为其父级,   它仍然被称为孤儿过程   自从最初的过程   创造它不再存在。   Taken from wikipedia

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

2 个答案:

答案 0 :(得分:11)

孤儿一直被init收养。没有Unix方法将父级更改为某些非初始化进程。


从Linux 3.4开始,这已不再严格。仍然没有可移植的Unix方式这样做,但正如Andy Lutomirski指出Linux 3.4为prctl增加了PR_SET_CHILD_SUBREAPER

  

实际上,subreaper履行init(1)的角色   后代过程。

答案 1 :(得分:9)

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