- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我有点懵。据我了解,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/
程序: #include #include #include #include #include int main() { int pid=fork(); if(pid==0){
我需要能够: fork 一个进程并使它成为 execvp(我做到了) 检查子进程execvp是否成功(不知道如何) 检查子进程是否完成(有问题) 我正在 fork 一个进程,但我没有任何方法来检查 c
我有点懵。据我了解,pid 为 -1 的 waitpid 意味着我等待所有 child 完成但是如果我向 WNOHANG 的 waitpid 添加一个选项,该选项表示如果没有完成则立即退出......
我将我的程序作为守护进程运行。 父进程只等待子进程,当它意外死亡时,fork并再次等待。 for (; 1;) { if (fork() == 0) break; int sig = 0;
在构建 shell 程序时,我遇到了识别进程状态的问题。我面临的问题的描述是,我有一个子进程列表,我正在尝试使用 waitpid 和 WNOHANG 来弄清楚它们的状态。我想区分 3 种状态:TERM
我想知道我的子进程何时退出。但我不想阻止我的应用程序,所以我使用 WNOHANG。 #include #include #include #include #include #include
我需要一个在 C 中组合使用 waitpid、WNOHANG 和 SIGCHLD 的示例,以及如何将它们全部用于 fore\background? signal( SIGCHLD, SIG_IGN
我目前正在上系统编程课,我们今天复习了 wait 系统调用函数。我正在阅读有关 waitpid() 系统调用的部分,并在选项部分列出了一个名为 WNOHANG 的部分。 pid_t waitpid*(
我正在编写一个程序,其中可以创建多个子进程,并且即使子进程尚未终止,父进程也会继续执行。但是,一旦它们终止,我希望在提示用户创建更多子进程之前打印它们。 根据我对(waitpid((pid_t)-1,
摘自Unix Network Programming Vol1 Third Edition Section 5.10 wait and waitpid functions #include "u
我是一名优秀的程序员,十分优秀!