当我尝试在终端上运行此代码时,在提示符后输出“来自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);
}
我的问题是为什么我会在提示后收到“来自子进程的问候”?
答案 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()
,它将用于存储孩子的退出状态。