C 父进程如何等待所有子进程终止
我是C语言的新手,所以我只知道简单的函数 以下是我的主要问题: 修改程序,以便只有父进程创建3个子进程,每个子进程 新创建的进程调用函数CPU。此外,使父进程等待 每个孩子的终止 我知道这个答案是正确的 我不知道如何编写CPU函数 此代码不会并行执行子进程,而是按顺序执行每个子进程。只有在子进程做了一些超出打印一条消息和退出的事情之后,差异才会显现出来。您可以添加sleep1 wait函数将等待一个子进程的终止,以先结束的为准。如果您有3个子进程,则必须至少成功调用wait 3次,以确保每个子进程都已终止。也许更容易调用wait,直到它将errno设置为ECHILD,这意味着没有孩子了:C 父进程如何等待所有子进程终止,c,C,我是C语言的新手,所以我只知道简单的函数 以下是我的主要问题: 修改程序,以便只有父进程创建3个子进程,每个子进程 新创建的进程调用函数CPU。此外,使父进程等待 每个孩子的终止 我知道这个答案是正确的 我不知道如何编写CPU函数 此代码不会并行执行子进程,而是按顺序执行每个子进程。只有在子进程做了一些超出打印一条消息和退出的事情之后,差异才会显现出来。您可以添加sleep1 wait函数将等待一个子进程的终止,以先结束的为准。如果您有3个子进程,则必须至少成功调用wait 3次,以确保每个子进
while (1) {
errno = 0;
if (wait(NULL) == -1) {
if (errno != ECHILD) {
perror("Unexpected error from wait");
}
break;
}
}
每个父进程都应该等待自己的子进程。使用上面的代码,而不是计算等待的次数
这意味着只需:调用名为CPU的函数,即
在子进程中
顺便说一句,您的代码缺少几个函数所需的头-
#include <sys/types.h>
#include <sys/wait.h>
用于fork,另外包括我的errno
此代码不会并行执行子进程,而是按顺序执行每个子进程。只有在子进程做了一些超出打印一条消息和退出的事情之后,差异才会显现出来。您可以添加sleep1
wait函数将等待一个子进程的终止,以先结束的为准。如果您有3个子进程,则必须至少成功调用wait 3次,以确保每个子进程都已终止。也许更容易调用wait,直到它将errno设置为ECHILD,这意味着没有孩子了:
while (1) {
errno = 0;
if (wait(NULL) == -1) {
if (errno != ECHILD) {
perror("Unexpected error from wait");
}
break;
}
}
每个父进程都应该等待自己的子进程。使用上面的代码,而不是计算等待的次数
这意味着只需:调用名为CPU的函数,即
在子进程中
顺便说一句,您的代码缺少几个函数所需的头-
#include <sys/types.h>
#include <sys/wait.h>
对于fork,另外包括我的errno addition。这不是一个C问题,因为C11标准中没有提到等待。这可能是一个问题,一个Unix问题,或者一个Linux问题。因此,编辑你的问题以改进它,并给出一些建议。顺便说一句,StackOverflow不是一个做我的家庭作业的网站。阅读或更新与Unix、Linux或POSIX编程相关的内容。也请阅读。。。当然,最后请阅读,使用所有警告和调试信息编译:gcc-Wall-Wextra-g,并了解program@BasileStarynkevitch我不认为这是直接做作业的问题,但更像是一些问题,在你编写了一个有意义的子流程之后,答案才变得明显。我给出了几个链接,以帮助OPIt不是C问题,因为C11标准中没有提到等待。这可能是一个问题,一个Unix问题,或者一个Linux问题。因此,编辑你的问题以改进它,并给出一些建议。顺便说一句,StackOverflow不是一个做我的家庭作业的网站。阅读或更新与Unix、Linux或POSIX编程相关的内容。也请阅读。。。当然,最后请阅读,使用所有警告和调试信息编译:gcc-Wall-Wextra-g,并了解program@BasileStarynkevitch我不认为这是直接做作业的问题,但更像是一些问题,在你写了一个有意义的子过程之前,答案并不明显
void CPU(void) {
}
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>