gpt4 book ai didi

c - 如何让父进程等待子进程完成?

转载 作者:行者123 更新时间:2023-12-04 18:39:37 24 4
gpt4 key购买 nike

我有一个任务,它给了我这个代码来转换成一个让父进程等待所有子进程完成的代码。
PS:第一个代码有4个进程,需要使用waitpid来解决。

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
int main(){
pid_t p = fork();
pid_t k = fork();

if(p>0){
printf("p=%d: PID = %d\n", p, getpid());
sleep(45);
exit(0);
}
else if(p==0){
printf("p=%d: PID = %d\n", p, getpid());
exit(0);
}
else if(p<0){
printf("ERRO! p=%d\n", p);
exit(p);
}
}

我已经尝试过了,但我认为这只适用于 1 个子进程,而不适用于其中的很多子进程。
int main(){

pid_t p = fork();
pid_t k = fork();

if(p<0){
printf("fodeu");
exit(p);
}
else if(p==0){
printf("");
exit(0);
}
else{
for(i=0;i<4;i++){
int returnstatus;
waitpid(p,&returnstatus,0);

if(returnstatus == 0){
printf("o processo filho correu normalmente");
}
else if(returnstatus == 1){
printf("o processo filho ardeu");
}
}
}
}

最佳答案

这不会完成你的任务,但我希望这是足够的建议
你去。作业似乎是 fork() 的一个谜。 , 您的
老师很有品味:-)

fork()是不同的。它返回两次。

  • 在父进程中,它返回创建进程的进程 ID。
  • 在 child 中,它返回 0;一个进程总是可以使用getpid() 来确定它的PID。

  • 实际上,这个任务的味道并不好。通常使用 `fork() 编写代码
    永远不要让任何分支逃逸到封闭代码中以避免完成
    废话。像这样,
    #include <sys/types.h>
    #include <sys/wait.h>
    #include <unistd.h>
    #include <stdio.h>
    #include <unistd.h>
    #include <stdlib.h>

    int main()
    {
    pid_t pid = fork();
    if (pid == 0 /*child*/) {
    printf("PID %d (child) doing work\n", pid);
    sleep(5);
    exit(0); // don't let it continue (leak) into parent code
    }
    else if (pid > 0 /*parent*/) {
    int status;
    pid_t terminated;

    printf("PID %d (parent) waiting for child PID %d\n", getpid(), pid);

    terminated = waitpid(pid, &status, 0);
    if (terminated == -1) {
    perror("waitpid");
    exit(1);
    }

    if (WIFEXITED(status))
    printf("child exited normally with status %d\n", WEXITSTATUS(status));
    else
    printf("hm. child died otherwise. see 'man waidpid' for more\n");
    }

    return 0;
    }

    考虑到这一点,看看这两条看似无辜的线条,
    pid_t p = fork(); // two processes after this
    pid_t k = fork(); // executed by **two** processes, again duplicating

    所以,在这两行之后,我们有四个进程执行其余的
    代码并行。这是大脑爆炸的地方。什么 k 的泄露的 child 呢?当它询问 p 时,该行会做什么的值(value)
    是?

    看看这个小程序的输出,看看效果如何
    泄漏。
    #include <sys/types.h>
    #include <unistd.h>
    #include <stdio.h>

    int main(){
    printf("MAIN PID %d\n", getpid());

    fork();
    fork();

    printf("PID %d, PPID %d\n", getpid(), getppid());
    return 0;
    }

    关于c - 如何让父进程等待子进程完成?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61466564/

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