使用fork()的程序终端输出不正确

时间:2018-05-21 18:30:54

标签: c linux terminal fork

当我尝试在终端上运行此代码时,在提示符后输出“来自X进程的hello”:

#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
#include <stdlib.h>

void forkexample() 
{
    pid_t pidTo;
    int status = 0;
    int x = 1;

    if (fork() == 0){
        printf("hello from child process %d\n",getpid());
    }
    else{
        printf("hello from the parent process %d\n",getpid());
    }
}
int main()
{
    forkexample();
    exit(0);
}

我的问题是为什么我会在提示后收到“来自子进程的问候”?

Terminal screenshot

1 个答案:

答案 0 :(得分:3)

问题

您的父进程不会等待子进程完成执行。

基本上你的程序退出&amp;当您的子进程尚未完成打印时,您的shell会打印提示,因此您可以在提示后获得子进程的输出。

解决方案

使用wait()

if (fork() == 0)
  {
    printf("hello from child process %d\n", getpid());
  }
else
  {
    wait(&status); // Wait for the child process
    printf("hello from the parent process %d\n", getpid());
  }

您可以将int指针传递给wait(),它将用于存储孩子的退出状态。