代码之家  ›  专栏  ›  技术社区  ›  Frank Ponte

当我创建一个简单的进程树[重复]时,输出很奇怪

  •  0
  • Frank Ponte  · 技术社区  · 7 年前

    我一直在用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 回复  |  直到 7 年前
        1
  •  1
  •   cnicutar    7 年前

    你不是在等待子进程结束。

    因此,您运行第一个进程,启动一系列新进程,然后退出。当你退出时 (恰好包括当前工作目录)。然后,您启动的其他进程将有机会运行、打印它们的内容并退出。