对多进程的一点不理解?

发布于 2022-10-15 08:49:21 字数 2085 浏览 29 评论 0

  1. #include <unistd.h>
  2. #include <sys/types.h>
  3. #include <sys/wait.h>
  4. #include <sys/stat.h>
  5. #include <stdio.h>
  6. #include <stdlib.h>
  7. int k=0;
  8. int i=0;
  9. void multiproc(int i)
  10. {
  11.    int nstatus=0;
  12.    int j=0;
  13.    pid_t pid=fork();
  14.    if(pid==0)
  15.    {
  16.       printf("child process\n");
  17.       
  18.       k=i+k;
  19.       printf("child i:%d\n",k);
  20.       exit(nstatus);
  21.    }
  22.    else
  23.    {
  24.       printf("father process\n");
  25.       wait(&nstatus);
  26.       j=WEXITSTATUS(nstatus);
  27.       printf("child’s pid =%d .exit status=%d\n",pid,j);
  28.       sleep(1);
  29.    }
  30. }
  31. int main(void)
  32. {
  33.    //int i=0;
  34.    for (;i<3;i++)
  35.    {
  36.      multiproc(i);
  37.      printf("i:%d\n",i);
  38.    }
  39.    return 0;
  40. }

复制代码运行结果:

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

幸福丶如此 2022-10-22 08:49:21

”那么在main函数中创建了3个子进程的循环应该执行9次吧 “

也就是说 ,我认为应该创建了9个子进程。

请恋爱 2022-10-22 08:49:21

调用循环三次,实际也只是fork了 3次。

飘然心甜 2022-10-22 08:49:21

子进程创建完就退出了

笑,眼淚并存 2022-10-22 08:49:21

”那么在main函数中创建了3个子进程的循环应该执行9次吧 “

也就是说 ,我认为应该创建了9个子进程。
eclipseluo 发表于 2011-04-22 15:52

    拷贝父进程的堆栈空间不是也照样做父进程做过的事情,比如父进程fork,子进程不再执行父进程中调用过的函数。否则子进程再fork,子进程fork的子进程再fork。。。无限循环下去,何止9次。

   不知道对不对。

苹果你个爱泡泡 2022-10-22 08:49:21

子进程创建完就退出了
whaaat 发表于 2011-04-22 17:08

    严重同意楼上!

离去的眼神 2022-10-22 08:49:21

严重同意楼上!
xxy0403 发表于 2011-04-23 00:23

    应该是这样的

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文