fork调用的一个奇妙之处就是它仅仅被调用一次,却能够返回两次,它可能有三种不同的返回值:
1)在父进程中,fork返回新创建子进程的进程ID;
2)在子进程中,fork返回0;
3)如果出现错误,fork返回一个负值;
fork()调用除了会复制父进程的所有已打开文件描述符, 还会复制父进程的缓存到子进程中.
终端stdout是行缓存的
普通文件的缓存是基于长度的, 也就是说输出到普通文件的数据, 在缓存后, 只有达到了缓存上限, 或者手动调用 flush/sync 等系统调用刷新, 才会清空缓存并刷新到文件中