我有点困惑.据我了解,waitpid的pid为-1意味着我等待所有孩子完成但是如果我在WNOHANG的waitpid中添加一个选项,那么这些选项如果没有完成就会立即退出......这些似乎非常令人困惑.
为什么我要告诉计算机等待子进程完成然后立即告诉它如果没有孩子完成就立即退出?
有人可以解释这个选项和WUNTRACED选项吗?我不知道被追查的意义.
Jem*_*ake 36
您通常在不同情况下使用WNOHANG和WUNTRACED.
案例1:假设你有一个过程会产生一群孩子,并且在孩子们跑步时需要做其他事情.这些孩子有时会退出或被杀死,但内核将保持其退出状态,直到其他进程通过wait()或waitpid()声明它.因此,您的父进程有时需要调用wait()/ waitpid()以让内核摆脱子进程的遗骸.但是我们不希望wait()/ waitpid()被阻塞,因为在这种情况下,我们的进程还有其他需要做的事情.我们只是想收集死过程的状态,如果有什么.这就是WNOHANG的用途.它会阻止wait()/ waitpid()阻塞,以便您的进程可以继续执行其他任务.如果一个孩子死了,它的pid将由wait()/ waitpid()返回,你的进程可以对此进行操作.如果没有任何东西死亡,则返回的pid为0.
案例2:假设您的父进程在子进程运行时不想做任何事情.你不想只是在用它做一些拇指twidling for循环,让你用一个正常的wait()/ waitpid函数()不WNOHANG.您的进程将从执行队列中取出,直到其中一个子节点死亡.但是如果你的一个孩子被SIGSTOP 拦住了怎么办?您的孩子不再处理您设置的任务,但父母仍在等待.所以,从某种意义上说,你有一个僵局,除非孩子继续通过你父母和那个孩子以外的某些方式.WUNTRACED允许您的父级从wait()/ waitpid()返回,如果孩子被停止以及退出或被杀死.这样,你的父母有机会发送一个SIGCONT来继续它,杀死它,将它的任务分配给另一个孩子,无论如何.