1

我使用 fork() 来使不同的进程运行并打印一条简单的消息。代码的结果让我感到困惑。看看代码:

#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <errno.h>
#include <math.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/sem.h>
#include <time.h>


int main(void)
{

    fork();
    fork();
    fork();
    fprintf(stderr,"hello world\n");

}

输出是:

mario@ubuntu:~/OS$ ./main
hello world
hello world
hello world
hello world
hello world
hello world
mario@ubuntu:~/OS$ hello world
hello world

mario@ubuntu:~/OS$ 

请注意,我在终端的第一行执行程序,但输出不是我所期望的。请帮我!提前致谢!如果用 printf("......") 更改 fprintf,也会发生同样的事情

编辑:我不明白为什么打印是这样的。终端线之前的六个,它旁边的一个和它后面的 1 个......

4

2 回答 2

3

当父程序退出时,运行父程序的 shell mario@ubuntu:~/OS$在屏幕上打印 shell 提示符。到那时尚未打印的任何子程序都hello world将在提示后打印。如果您希望提示不出现在所有hello worlds 之前,则需要让父级等待它的所有子程序和孙子程序终止。

检查这个看看如何让父母等待。

于 2012-11-29T18:44:36.637 回答
0

您正在创建 8 个进程。每个都fork将过程分为两部分。它的原始父级完成了我仍在执行的其他进程。因此,如果原始进程完成执行,则尽管其他进程仍在执行,shell 仍会执行并打印提示。

于 2012-11-29T18:47:34.977 回答