gpt4 book ai didi

c - waitpid,wnohang,wuntraced。我如何使用这些

转载 作者:太空狗 更新时间:2023-10-29 16:36:55 26 4
gpt4 key购买 nike

我有点懵。据我了解,pid 为 -1 的 waitpid 意味着我等待所有 child 完成但是如果我向 WNOHANG 的 waitpid 添加一个选项,该选项表示如果没有完成则立即退出......这些看起来非常困惑。

为什么我要告诉计算机等待子进程完成,然后在没有子进程完成时立即告诉它立即退出?

有人可以解释这个选项和 WUNTRACED 选项吗?我不知道被追踪意味着什么。

最佳答案

你通常在不同的情况下使用 WNOHANG 和 WUNTRACED。

案例 1:假设您有一个进程产生了一堆子进程,并且需要在子进程运行时做其他事情。这些 child 有时会退出或被杀死,但内核会保持它们的退出状态,直到其他进程通过 wait() 或 waitpid() 声明它。所以,你的父进程需要偶尔调用 wait()/waitpid() 让内核摆脱 child 的遗体。但我们不希望 wait()/waitpid() 阻塞,因为在这种情况下,我们的进程还有其他需要做的事情。我们只想收集死进程的状态如果有的话。这就是 WNOHANG 的用途。它可以防止 wait()/waitpid() 阻塞,以便您的进程可以继续执行其他任务。如果一个 child 死了,它的 pid 将由 wait()/waitpid() 返回,您的进程可以对此采取行动。如果没有死亡,则返回的 pid 为 0。

情况 2:假设您的父进程不想在子进程运行时什么。您不想让它做一些费力的 for 循环,所以您使用没有 WNOHANG 的普通 wait()/waitpid()。你的进程被从执行队列中取出,直到其中一个 child 死亡。但是,如果您的一个 child 通过 SIGSTOP 停止怎么办?您的 child 不再执行您为其设置的任务,但 parent 仍在等待。所以,从某种意义上说,你遇到了一个僵局,除非这个 child 通过你 parent 和那个 child 之外的某种方式继续下去。如果 child 停止以及退出或被杀,WUNTRACED 允许您的 parent 从 wait()/waitpid() 返回。这样,您的 parent 就有机会向它发送 SIGCONT 以继续它、终止它、将其任务分配给另一个 child ,等等。

关于c - waitpid,wnohang,wuntraced。我如何使用这些,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33508997/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com