gpt4 book ai didi

c - fork了10个子进程,父进程如何收集它们的返回值?

转载 作者:行者123 更新时间:2023-11-30 17:01:32 24 4
gpt4 key购买 nike

我必须在 1000 个数字和 10 个子进程的数组中找到最大值(这样每个子进程只检查一百个值),而父进程只需收集数据。我已经完成了整个事情,但我一直在阅读这些值。

代码如下:

#include <stdio.h>
#include <time.h>
#include <stdlib.h>

int main(){
int array[1000];
int i, j;
int pids[10];
int searchminindex;
int searchmaxindex;
int maxindex;

srand(time(NULL));

//fill up array with random numbers
for(i = 0; i < 1000; i++)
{
tomb[i] = random() % 5000;
}

//create 10 child processes
for (i = 0; i < 10; i++) {
if ((pids[i] = fork()) < 0) {
perror("fork");
abort();
}
else if (pids[i] == 0) {
searchminindex = i * 100;
searchmaxindex = (i+1) * 100;

//finding the biggest value
maxindex = searchminindex;
for(j = searchminindex+1; j < maxindex; j++) {
if( array[maxindex] < array[j])
maxindex = j;
}
}

}
for(i = 0; i < 10; i++){
//here's where I'd read the return values of the subarrays
}

return 0;
}

我尝试过使用管道和 WEXITSTATUS,但我真的很困惑,不知道在哪里关闭管道的一端以及类似的东西,而使用 WEXITSTATUS 我完全迷失了。

你有什么可以帮忙的吗?

最佳答案

您需要测试从 fork 返回的 pid,并对代码进行分支,以便您的主进程不会像子进程一样运行,这样您的子进程就不会生成自己的子进程。一旦解决了...

mmap 或设置共享内存的替代方法是使用 WEXITSTATUS。根据手册页,它只会返回最低有效 8 位,因此如果您的返回值可能大于 127,这可能不是您的最佳选择。可以工作到 255,但要小心 char 的符号,它不是标准的。

int returned_values[10];
for(int i = 0; i < 10; ++i)
{
int status;
wait(&status);
if(WIFEXITED(status))
returned_values[i] = WEXITSTATUS(status);
else {
//Do something more meaningful here
//This means a child received a signal, or any of the other ways wait returns other than a child exiting.
--i;
}

关于c - fork了10个子进程,父进程如何收集它们的返回值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36968045/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com