我想写一个C程序,询问用户一个整数并将其存储在变量n中。然后,主进程创建两个 子进程(两者都必须是主进程的子进程)。如果n> 10且未成功,则一个孩子成功退出 否则,如果n> 20则另一个孩子成功退出,否则不成功。主要流程必须打印 有多少孩子成功结束了。
这是我到目前为止所拥有的。
#include <stdio.h>
void main (void)
{
int n;
printf("Give me a number: ");
scanf("%d", &n);
pid_t child_a,child_b;
child_a = fork();
if (child_a == 0) {
if (n>10) {
exit(1)
}else{
exit(0)
}
} else {
child_b = fork();
if (child_b == 0) {
if (n>20){
exit(1)
}else{
exit(0)
}
} else {
/* Parent Code */
}
}
}
但是,如何计算有多少子进程成功结束?
答案 0 :(得分:1)
您需要使用wait()
命令,系统调用wait()
功能会阻止调用进程,直到其子进程之一退出或收到信号为止。
int status;
pid_t pid = wait(&status);
printf("Exit = %d, child = %d\n", WEXITSTATUS(status), pid);
见示例:
fork() and wait() with two child processes
和第二个使用wait()和WEXITSTATUS()
的例子还有关于多核进程调度的更多信息: