加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

叉叉()多进程Unix问题

发布时间:2020-12-15 19:05:50 所属栏目:安全 来源:网络整理
导读:所以我有这个功能,它分配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: %dn",i,getpid())
所以我有这个功能,它分配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: %dn",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()调用返回两次,因此父进程和子进程继续循环并产生新的进程。每个孩子(原来的父母和孩子)然后再次叉,反复加倍进程的数量…

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读