gpt4 book ai didi

c - 多个 fork 语句

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

除原始进程外,此代码还创建了 3 个进程。因此总共存在 4 个进程。据我所知,这段代码应该打印 8 条语句。然而,结果只有 4 个语句。我在这里错过了什么?

#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>

// error checking is omitted

int main(int argc, char const *argv[])
{
pid_t pid, pid2;

fflush(stdout);// used to clear buffers before forking
pid = fork();
fflush(stdout);
pid2 = fork();

if(pid == 0) {
printf("%d is the first generation child from first fork\n", getpid());
}

else if(pid > 0) {
printf("%d is the original process\n", getpid());
wait();
}

else if(pid2 == 0) {
printf("%d is the 2nd generation child from the second fork by the first generation child \n", getpid());
}

else if(pid2 > 0) {
printf("%d is the first generation younger child from the 2nd fork by the original\n", getpid() );
wait();
}

return 0;
}

输出

4014是原始进程4016是原始进程4015是first fork的第一代 child 4017是first fork的第一代 child

最佳答案

因为else if,每个进程只能打印一行,4个进程就是4行。

你应该替换:

else if(pid2 == 0) {

通过:

 if(pid2 == 0) {

必须对 pid 和 pid2 进行测试,以便每个进程打印 2 行。

关于c - 多个 fork 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29194471/

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