【问题标题】:Weird output when i create a simple tree of process [duplicate]当我创建一个简单的进程树时奇怪的输出[重复]
【发布时间】:2018-04-05 20:26:03
【问题描述】:

我一直在练习 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!

我不知道为什么它在执行过程中显示可执行文件所在的目录,知道原因吗?

谢谢! :-)

【问题讨论】:

    标签: c ubuntu terminal output fork


    【解决方案1】:

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

    因此,您运行您的第一个进程,启动一整套新进程并退出。当您退出时您会返回提示(恰好包括当前工作目录)。然后准随机地让您启动的其他进程有机会运行、打印它们的内容并退出。

    【讨论】:

    • 我刚刚意识到,它正在返回提示,因为我退出了主进程,退出后子进程仍在运行。谢谢!
    • @FrankPonte 对。仅仅因为父进程退出,子进程没有什么特别的事情发生。作为旁注,如果您使用没有空格的较短路径,您通常会更轻松。 (例如,“Práctica #1 - Solución”可以是“Práctica-1-Solución”)。
    • 我会记住的,谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-16
    • 2020-03-08
    • 1970-01-01
    相关资源
    最近更新 更多