进程能否将其子进程的所有权传递给它的父进程?
背景
假设我们有三个过程:祖父母,父母和孩子。
父母生儿育女(父母不死)。
祖父母处理孩子死亡时的处理问题,因此需要在孩子死亡时通知他们。拿到SIGCHLD会很棒的。
发布于 2019-10-27 23:36:05
通常,父进程负责对其子进程执行wait(),以便它们的子进程在终止时不会变成僵尸。如果父进程在子进程之前终止,那么必须有一些进程来扮演父进程的清理角色,同样,防止子进程变成僵尸。默认情况下,当进程终止时,所有剩余的子进程都将使用pid 1对进程进行修复。
Linux确实提供了带有prctl选项的PR_SET_CHILD_SUBREAPER系统调用。根据prctl的手册页:
PR_SET_CHILD_SUBREAPER(自Linux3.4起)如果arg2是非零,则设置调用进程的“子子收割器”属性;如果arg2为零,则取消设置属性。子收割机为其后代进程履行init(1)的角色。当一个进程变成孤儿(即它的直系亲属终止)时,该进程将被修复到最近的活祖先子收割器。随后,在孤立进程中对getppid()的调用现在将返回子收割进程的PID,当孤儿终止时,子收割进程将接收SIGCHLD信号,并能够在进程上wait(2)以发现其终止状态。“子收割机”属性的设置不是由fork(2)和clone(2)创建的子属性继承的。该设置在整个execve(2)中保存。在会话管理框架中,建立子收割过程是很有用的,在会话管理框架中,一个层次化的进程组由一个子收割进程管理,需要在其中一个进程--例如,双通道守护进程--终止时通知该进程(可能是为了重新启动该进程)。一些init(1)框架(例如,systemd(1))出于类似的原因使用了子收割过程。
这可能是一种选择,但父母去世的传宗接代(不仅仅是孙辈)将在呼叫过程中得到补偿。
https://unix.stackexchange.com/questions/549018
复制相似问题