我创建一个简单的流程树

时间:2017-10-24 21:56:52

标签: c ubuntu terminal output fork

我一直在C练习,在那里我必须创建一个简单的过程树。基本上,主进程使用fork()创建子进程,然后结束。子进程打印一条消息,创建自己的子进程并结束,此过程迭代3次。好吧,显然它在执行中的某处工作正常我得到了一个奇怪的输出(它打印了可执行文件所在的目录)。我正在共享终端的代码和输出。 (输出消息是西班牙语,抱歉):

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>


int main(){
    int i;
    pid_t cpid[3];
    printf("¡Hola, soy el proceso padre!\n");
    for (i=0;i<3; i++){
        cpid[i] = fork();
        if (cpid[i] == 0){
            printf("¡Hola, soy el proceso hijo N°%i!\n",i+1);
        }else{
            printf ("Terminando proceso %i....\n",i);
            exit (EXIT_SUCCESS);
        } 
    }
    printf ("Terminando proceso %i....\n",i);
    return 0;
}

这是我的输出:

fuhranku@frank-ubuntuVB:~/Escritorio/Práctica #1 - Solución/Ejercicios programados$ gcc -o foo ejercicio23.c 
fuhranku@frank-ubuntuVB:~/Escritorio/Práctica #1 - Solución/Ejercicios programados$ ./foo
¡Hola, soy el proceso padre!
Terminando proceso 0....
fuhranku@frank-ubuntuVB:~/Escritorio/Práctica #1 - Solución/Ejercicios programados$ ¡Hola, soy el proceso hijo N°1! <---- WEIRD OUTPUT 
Terminando proceso 1....
¡Hola, soy el proceso hijo N°2!

我不知道为什么它会显示执行文件处于执行过程中的目录,原因是什么?

谢谢! : - )

1 个答案:

答案 0 :(得分:1)

你不是在等待儿童进程结束。

所以你运行你的第一个进程,启动一个新进程的部分并退出。当您退出时,会返回提示(恰好包含当前工作目录)。然后准随机地开始你开始的其他过程,打印他们的东西并退出。