给定以下名为“hello”的程序(代码如下), 做的时候: 。/你好 输出是:
Hello
Hello
Hello
Hello
Hello
Hello
Hello
当这样执行时:./hello > out.txt out.txt 包含 12 个你好。 为什么? 我知道我重定向了标准输出,所以 Fludh 可能会受到影响。
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
int main()
{
// printf("Main PID: %d\n", getpid());
for (int j = 0; j<3; j++)
{
int pid = fork();
if (!pid)
{
printf("Hello\n");
}
}
while(wait(NULL) > 0) ;
}
为了检查 pid 和 ppid,我将
printf("Hello\n");
更改为:
printf("%d PID: %d, PPID: %d\n",j, getpid(), getppid());
并在 out.txt 文件中得到奇怪的输出:
0 PID: 4432, PPID: 4431
1 PID: 4433, PPID: 4432
2 PID: 4434, PPID: 4433
0 PID: 4432, PPID: 4431
1 PID: 4433, PPID: 4432
1 PID: 4435, PPID: 4431
2 PID: 4436, PPID: 4435
0 PID: 4432, PPID: 4431
2 PID: 4437, PPID: 4432
1 PID: 4435, PPID: 4431
0 PID: 4432, PPID: 4431
2 PID: 4438, PPID: 4431
另外,当我在循环外添加
printf("Main PID: %d\n", getpid());
(在它上面)
out.txt 包含它 8 次!
有什么想法吗?
我期待输出包含相同数量的 hellos