【问题标题】:making parent process wait till child has called exec让父进程等到子进程调用 exec
【发布时间】:2013-06-12 19:39:20
【问题描述】:

在 linux 中,调用 fork() 后,我的子进程将很快调用 exec。有没有办法让父进程等待()并且在子进程执行之前不做任何事情?

谢谢。

【问题讨论】:

    标签: linux fork


    【解决方案1】:

    使用vfork() 代替fork()。这会导致父级暂停,直到子级退出或调用execve() 系列函数之一。

    【讨论】:

      【解决方案2】:

      没有 (API) 方法让父母知道孩子正在执行 exec()。

      但是有一个很好的管道技巧:让孩子继承一个文件描述符(对于管道)并且(在 fork() 之前)为管道设置 close-on-exec 标志。当 exec() 关闭管道时,管道上的 EOF 将通知父级。

      请注意,这不需要孩子的任何合作。

      【讨论】:

        【解决方案3】:

        您需要使用waitpid 使用从返回给父级的fork 调用返回的进程ID。

        编辑

        或者,如果您的意思是您想知道孩子即将调用 exec,请在父母中使用 pause。让子进程调用kill,并向父进程发出合适的信号(其进程ID 可以从getppid 获得)。 USR1 信号可能有用。在执行之前执行此操作。

        【讨论】:

        • 另外,我不确定 waitpid() 与 OP 检测孩子何时调用 exec*() 的要求有何关联。
        • 正如 IBY 所指出的,我找不到任何与 waitpid 一起使用的状态,表明孩子已被执行
        • 我把“has exec`ed”拿来表示孩子已经执行了一个程序完成。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-11-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多