subprocess在创build时从第一行开始(用fork)

为什么我的subprocess从main的第一行开始? 当我运行我的程序时,“你好”会被打印两次。 subprocess应该在fork之后开始,对不对?

int main(){ printf("Hello There!"); pid_t PID; PID = fork(); if(PID == 0){ //Child } else{ //parent } } 

这对我来说是一个巨大的问题,因为在我真正的程序中,我在fork之前使用mmap制作私有文件。 正因为如此,父母和孩子有不同的私人文件..

不是被称为两次…这是一个错觉! 🙂

但是…你的STDOUT没有被刷新,因为没有\ n,你的fork然后复制你的整个状态,这两个进程都在进行,最后它们都会刷新它们的输出缓冲区(在fork()期间被复制)并使输出出现两次。

如果你添加一个\ n,那么改变你的printf行如下:

 printf("Hello There!\n"); 

你现在会得到预期的结果。

或者明确地刷新你的输出:

 printf("Hello There!"); fflush(stdout);