Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 父进程如何等待所有子进程终止_C - Fatal编程技术网

C 父进程如何等待所有子进程终止

C 父进程如何等待所有子进程终止,c,C,我是C语言的新手,所以我只知道简单的函数 以下是我的主要问题: 修改程序,以便只有父进程创建3个子进程,每个子进程 新创建的进程调用函数CPU。此外,使父进程等待 每个孩子的终止 我知道这个答案是正确的 我不知道如何编写CPU函数 此代码不会并行执行子进程,而是按顺序执行每个子进程。只有在子进程做了一些超出打印一条消息和退出的事情之后,差异才会显现出来。您可以添加sleep1 wait函数将等待一个子进程的终止,以先结束的为准。如果您有3个子进程,则必须至少成功调用wait 3次,以确保每个子进

我是C语言的新手,所以我只知道简单的函数

以下是我的主要问题:

修改程序,以便只有父进程创建3个子进程,每个子进程 新创建的进程调用函数CPU。此外,使父进程等待 每个孩子的终止

我知道这个答案是正确的

我不知道如何编写CPU函数

此代码不会并行执行子进程,而是按顺序执行每个子进程。只有在子进程做了一些超出打印一条消息和退出的事情之后,差异才会显现出来。您可以添加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

此代码不会并行执行子进程,而是按顺序执行每个子进程。只有在子进程做了一些超出打印一条消息和退出的事情之后,差异才会显现出来。您可以添加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>