当我多次使用fork()时,我的程序不会停止

时间:2015-07-23 03:39:29

标签: c ubuntu fork

我正在尝试在我的Ubuntu机器上运行以下代码

#include <pthread.h>
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
#include <stdlib.h>

int main()
{
  fork();
  fork();
  fork();

  printf("hello\n");

  exit(0);
}

当我使用fork()两次运行上面的代码时,我得到四个&#34; Hello&#34; s as 预期。但是,当我运行上面的代码时,程序只是循环而从不 返回。(它确实打印了两个&#34; Hello&#34; s顺便说一下)

为什么会发生这种情况?我该如何解决这个问题?

我提前感谢。

1 个答案:

答案 0 :(得分:2)

我通过在其中添加pid来修改您的代码,只是为了打印正在发生的事情。在您的系统中执行此操作,您将能够找到答案。
在三个叉子“你好”之后应该打印8次(我认为你错误地提到了你的问题两次)。

#include <pthread.h>
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
#include <stdlib.h>

int main()
{
  pid_t pid1,pid2,pid3;
  pid1 = fork();
  pid2 = fork();
  pid3 = fork();

  printf("hello in [%u][%u][%u]\n",pid1,pid2,pid3);

  exit(0);
}

我得到的输出如下:

[p@devmach PROG]$ ./a.out
hello in [30092][30093][30094]
[p@devmach PROG]$ hello in [30092][30093][0]
hello in [30092][0][30095]
hello in [0][30096][30097]
hello in [30092][0][0]
hello in [0][30096][0]
hello in [0][0][30098]
hello in [0][0][0]