叉叉()多进程Unix问题

前端之家收集整理的这篇文章主要介绍了叉叉()多进程Unix问题前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
所以我有这个功能,它分配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()调用返回两次,因此父进程和子进程继续循环并产生新的进程。每个孩子(原来的父母和孩子)然后再次叉,反复加倍进程的数量

猜你在找的Bash相关文章