【问题标题】:Can a child process wait for the parent process to terminate in Linux programming in C?在 C 语言的 Linux 编程中,子进程可以等待父进程终止吗?
【发布时间】:2015-09-22 17:40:35
【问题描述】:

在Linux的C编程中,我知道wait()函数是用来等待子进程终止的,但是有没有一些方法(或函数)让子进程等待父进程终止?

【问题讨论】:

  • 在父子之间创建一个管道。当父进程终止时,子进程将从管道中读取 EOF。

标签: c linux unix


【解决方案1】:

Linux 对此有一个扩展(如非 POSIX 函数)。查找prctl(“流程相关控制”)。

使用prctl,您可以安排孩子在父母去世时收到信号。查找与prctl 一起使用的PR_SET_PDEATHSIG 操作码。

例如,如果您将其设置为SIGKILL 信号,它有效地为我们提供了一种在父母死亡时让孩子死亡的方法。但当然,信号可以是孩子可以捕捉到的东西。

prctl 可以做各种其他事情。这就像一个ioctl,其目标是进程本身:一个“进程 ioctl”。

【讨论】:

  • 另外请注意,您可以使用signalfd 通过文件描述符同步获取信号(例如,通过select 进行监视)而不是通过处理程序异步获取信号(它允许安全的操作很少)
【解决方案2】:

简短回答:不。

父进程可以控制其子进程的终端或进程组,这就是我们有wait()waitpid() 函数的原因。孩子没有对父母的那种控制,所以没有内置的东西。

如果您确实需要孩子知道其父母何时退出,您可以让父母在 atexit() 处理程序中向孩子发送信号,并让孩子捕捉该信号。

【讨论】:

    【解决方案3】:

    在 Linux 中,您可以使用值为 PR_SET_PDEATHSIG 的 prctl 来建立一个信号,该信号将在创建它的 线程 死亡时发送到您的进程。也许你觉得它很有用。

    【讨论】:

      【解决方案4】:

      当父进程结束时,子进程被 init 采用,因此如果 ppid()==1 或 ppid()!= 而不是原始 PPID,则检查子进程就足够了 这意味着父进程已经完成。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-11-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多