gpt4 book ai didi

c - 问题 fork() 多进程 Unix

转载 作者:太空狗 更新时间:2023-10-29 16:33:32 26 4
gpt4 key购买 nike

所以我有这个函数可以 fork N 个子进程。然而,它似乎比指定的要多。你能告诉我我做错了什么吗?谢谢

void forkChildren(int nChildren){
int i;
for(i = 1; i <= nChildren; i++){
pid = fork();
if(pid == 0)
printf("I'm a child: %d PID: %d\n",i, getpid());
}

}

在主要我调用:

forkChildren(5);

我期待以下输出:

I'm a child: 1 PID: 2990
I'm a child: 2 PID: 2991
I'm a child: 3 PID: 2992
I'm a child: 4 PID: 2993
I'm a child: 5 PID: 2994

但我得到的是:

I'm a child: 1 PID: 2990
I'm a child: 2 PID: 2991
I'm a child: 3 PID: 2992
I'm a child: 4 PID: 2993
I'm a child: 5 PID: 2994
user@computer:~/directory/$ I'm a child: 2 PID: 2999
I'm a child: 3 PID: 3000
I'm a child: 3 PID: 3001
I'm a child: 4 PID: 3002
I'm a child: 5 PID: 3003
I'm a child: 5 PID: 3004
I'm a child: 4 PID: 3005
I'm a child: 5 PID: 3006
I'm a child: 4 PID: 3007
I'm a child: 5 PID: 3008
I'm a child: 3 PID: 3011
I'm a child: 4 PID: 3012
I'm a child: 4 PID: 3010
I'm a child: 5 PID: 3013
I'm a child: 5 PID: 3014
I'm a child: 5 PID: 3015
I'm a child: 4 PID: 3018
I'm a child: 5 PID: 3019
I'm a child: 5 PID: 3020
I'm a child: 5 PID: 3021
I'm a child: 5 PID: 3023
I'm a child: 5 PID: 3025
I'm a child: 5 PID: 3024
I'm a child: 4 PID: 3022
I'm a child: 5 PID: 3026
I'm a child: 5 PID: 3027

最佳答案

fork() 调用生成一个新进程,该进程在派生发生的同一点开始执行。所以,看起来 fork “返回了两次”

这里发生的是您的 fork() 调用返回两次,因此父进程和子进程都继续循环并产生新进程。每个 child (原始 parent 和 child 的)然后再次 fork ,重复加倍进程数......

关于c - 问题 fork() 多进程 Unix,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1664787/

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