在Linux的C编程中,我知道
wait()
函数用于等待子进程终止,但是是否有一些方法(或函数)让子进程等待父进程终止呢?Linux有一个扩展功能(非POSIX函数)可实现此功能。查找 prctl
("进程相关控制")。
使用prctl
,您可以安排子进程在父进程终止时接收信号。查找使用prctl
的 PR_SET_PDEATHSIG
操作码。
例如,如果将其设置为SIGKILL
信号,则有效地为我们提供了一种方法,使得子进程在父进程终止时也终止。当然,该信号可以是子进程可以捕获的任何信号。
prctl
还可以执行各种其他任务。它就像一个以进程本身作为目标的 ioctl
:一个“进程 ioctl”。
signalfd
通过文件描述符同步获取信号(例如,通过 select
进行监视),而不是通过处理程序异步获取信号(这样只允许非常少的安全操作)。 - o11cprctl
函数,这样就不会在进程启动早期等不方便的时间发生信号。然后,在调用函数后,检查父进程是否仍然存活。如果你确定你的程序不是由 init 守护进程(PID 1)直接生成的,你可以调用 getppid
函数;如果返回值为 1,则表示父进程已经死亡(导致该进程被重新分配给 PID 1 作为其父进程)。 - Kaz简短回答:不行。
父进程可以控制其子进程的终端或进程组,这就是为什么我们有wait()
和waitpid()
函数。子进程不能控制其父进程,因此没有内置方法实现。
如果你真的需要子进程知道其父进程何时退出,你可以让父进程在atexit()
处理程序中向子进程发送信号,并让子进程捕获该信号。