gpt4 book ai didi

c - 在所有过程完成但输出奇怪后使用等待等待

转载 作者:太空宇宙 更新时间:2023-11-04 08:50:45 25 4
gpt4 key购买 nike

我想用四个并行进程做一些事情

我首先 fork onec,然后在子进程和父进程中再次 fork 以获得 4 个进程。

我想要的是在所有 4 个进程完成后做一些事情,所以我使用 waitpid(-1, &status, 0);

我理想的输出是

in

numbers

out

但实际输出有时可能是

in

numbers

out

one number

我想不通。

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <sys/time.h>
#include <error.h>

int main()
{
pid_t cpid, w;
int status;

printf("%s\n", "in");
cpid = fork();
if (cpid == 0)
{
cpid = fork();
if (cpid == 0)
{
printf("%s\n", "1");
exit(EXIT_SUCCESS);
}
else{
printf("%s\n", "2");
exit(EXIT_SUCCESS);
}
}
else{
cpid = fork();
if (cpid == 0)
{
printf("%s\n", "3");
exit(EXIT_SUCCESS);
}
else{
printf("%s\n", "4");
//exit(EXIT_SUCCESS);
}
}
waitpid(-1, &status, 0);
printf("%s\n", "out");
//do something
exit(EXIT_SUCCESS);
return 0 ;
}

最佳答案

您正在使用 waitpid()pid=-1。它等待任何子进程完成。这意味着,只要任何一个子进程完成,父进程的 waitpid() 就会退出。它不会等待任何其他子进程完成。

关于c - 在所有过程完成但输出奇怪后使用等待等待,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19782233/

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