gpt4 book ai didi

c - 如何同时运行子进程?在 c

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

所以这是我的代码,它将一个 int 作为命令行参数,然后派生 N 个子进程(同时运行)。然后当每个 child 结束时, parent 将回显 child 退出状态。

但是现在我只能一个接一个地做,不能同时做。我该怎么做?

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <time.h>

int main ( int argc, char *argv[] )
{
int i, pid, ran;

for(i = 0; i < atoi(argv[1]); i++) {
pid = fork();
srand(time(NULL));
ran = (rand() % 10) + 1 ;

if (pid < 0) {
printf("Error");
exit(1);
} else if (pid == 0) {
printf("Child (%d): %d\n", i + 1, getpid());
printf("Sleep for = %d\n", ran);
sleep(ran);
exit(ran);
} else {
int status = 0;
pid_t childpid = wait(&status);
printf("Parent knows child %d is finished. \n", (int)childpid);
}
}

最佳答案

您在生成子项的循环内调用 wait(),因此在当前子项完成之前,它不会继续循环以启动下一个子项。

您需要在循环外的单独循环中调用 wait():

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <time.h>

int main ( int argc, char *argv[] )
{
int i, pid, ran;

for(i = 0; i < atoi(argv[1]); i++) {
pid = fork();
srand(time(NULL));
ran = (rand() % 10) + 1 ;

if (pid < 0) {
printf("Error");
exit(1);
} else if (pid == 0) {
printf("Child (%d): %d\n", i + 1, getpid());
printf("Sleep for = %d\n", ran);
sleep(ran);
exit(ran);
}
}

for(i = 0; i < atoi(argv[1]); i++) {
int status = 0;
pid_t childpid = wait(&status);
printf("Parent knows child %d is finished. \n", (int)childpid);
}
}

关于c - 如何同时运行子进程?在 c,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33046569/

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