叉叉()多进程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()调用返回两次,因此父进程和子进程继续循环并产生新的进程。每个孩子(原来的父母和孩子)然后再次叉,反复加倍进程的数量… (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |