【问题标题】:What does wait() do if the child calls exec?如果孩子调用 exec,wait() 会做什么?
【发布时间】:2019-09-02 18:35:49
【问题描述】:

如果子进程调用 exec,它会终止并使用相同的 pid 创建一个新进程。

wait() 函数会等待子节点还是孙子节点终止?

【问题讨论】:

  • 在子进程调用exec 之后,仍然有相同的子进程ID,但运行的是不同的程序——没有孙子进程(目前)。即使后续有孙子,因为子分叉,原来的进程也等不及那个孙子;它只能等待它自己的直系后代,通过fork()(或者posix_spawn())处理它自己创建的进程。

标签: c process exec


【解决方案1】:

如果子进程调用 exec,它会终止并使用相同的 pid 创建一个新进程。

不,不完全是。

exec 不会创建新进程——它会用新程序覆盖单个进程(旧进程)。所以没有新的孩子(没有“孙子”),也没有新的pid。所以如果父调用wait,它不会返回,直到exec'ed 程序调用。 (事实上​​,exec 并没有太多的外部影响,父母完全可以检测到。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-24
    • 1970-01-01
    • 1970-01-01
    • 2012-10-24
    • 2012-09-10
    • 2014-06-19
    相关资源
    最近更新 更多