c - 当我创建一个简单的进程树时出现奇怪的输出

标签 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!

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

谢谢! :-)

最佳答案

您不会等待子进程结束。

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

关于c - 当我创建一个简单的进程树时出现奇怪的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46920697/

相关文章:

c - 当函数没有返回值时意味着什么?

ruby-on-rails - Rails 找不到临时目录 (ArgumentError)

java - 如何在控制台中重做/避免换行?

bash - 如何用awk为每个变量添加一个字符结尾?

android - Ubuntu/Elementary OS 无法设置 ANDROID_HOME

linux - 如何在 OSX 或 LINUX 上执行没有完整目录的 execv()?

c++ - 是否有必要在声明 char const *ptr = 'const' 时使用 "some characters"?

c - 'less'程序源码中的不常用函数定义

c - 当传递函数时我们什么时候需要&?

linux - 在多个文件中查找并替换特定术语