我正在尝试在我的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顺便说一下)
为什么会发生这种情况?我该如何解决这个问题?
我提前感谢。
答案 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]