对多进程的一点不理解?
- #include <unistd.h>
- #include <sys/types.h>
- #include <sys/wait.h>
- #include <sys/stat.h>
- #include <stdio.h>
- #include <stdlib.h>
- int k=0;
- int i=0;
- void multiproc(int i)
- {
- int nstatus=0;
- int j=0;
- pid_t pid=fork();
- if(pid==0)
- {
- printf("child process\n");
- k=i+k;
- printf("child i:%d\n",k);
- exit(nstatus);
- }
- else
- {
- printf("father process\n");
- wait(&nstatus);
- j=WEXITSTATUS(nstatus);
- printf("child’s pid =%d .exit status=%d\n",pid,j);
- sleep(1);
- }
- }
- int main(void)
- {
- //int i=0;
- for (;i<3;i++)
- {
- multiproc(i);
- printf("i:%d\n",i);
- }
- return 0;
- }
复制代码运行结果:
father process
child process
child i:0
child’s pid =4701 .exit status=255
i:0
father process
child process
child i:1
child’s pid =4702 .exit status=255
i:1
father process
child process
child i:2
child’s pid =4703 .exit status=255
i:2
-----------------------------------------------------------
子进程分配自己的虚地址空间,拷贝父进程的堆栈和数据段。
那么在main函数中创建了3个子进程的循环应该执行9次吧,每个子进程执行一轮循环。
但是为什么总共执行了一次循环了?
我不知道我说的你们懂不懂。。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
”那么在main函数中创建了3个子进程的循环应该执行9次吧 “
也就是说 ,我认为应该创建了9个子进程。
调用循环三次,实际也只是fork了 3次。
子进程创建完就退出了
拷贝父进程的堆栈空间不是也照样做父进程做过的事情,比如父进程fork,子进程不再执行父进程中调用过的函数。否则子进程再fork,子进程fork的子进程再fork。。。无限循环下去,何止9次。
不知道对不对。
严重同意楼上!
应该是这样的