Som*_*guy 4 c linux fork child-process
为什么我的子进程从main的第一行开始?当我运行我的程序时,"Hello There"将被打印两次.子进程应该在fork之后开始,我对吗?
int main(){
printf("Hello There!");
pid_t PID;
PID = fork();
if(PID == 0){
//Child
}
else{
//parent
}
}
Run Code Online (Sandbox Code Playgroud)
这对我来说是个大问题,因为在我的真实程序中,我在fork之前使用mmap制作私有文件.由于这一点,我发生了什么,父母和孩子有不同的私人文件..
它不会被叫两次......这是一种视错觉!:)
但是......你的STDOUT没有被刷新,因为没有\n,你的fork然后复制你的整个状态,两个进程都在进行,最终它们刷新,都刷新它们的输出缓冲区(在fork()期间复制),并导致输出出现两次.
如果添加\n,请更改printf行,如下所示:
printf("Hello There!\n");
Run Code Online (Sandbox Code Playgroud)
您现在将获得预期的结果.
或者明确刷新输出:
printf("Hello There!");
fflush(stdout);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
129 次 |
| 最近记录: |