fork調用的一個奇妙之處就是它僅僅被調用一次,卻能夠返回兩次,它可能有三種不同的返回值:
1)在父進程中,fork返回新創建子進程的進程ID;
2)在子進程中,fork返回0;
3)如果出現錯誤,fork返回一個負值;
fork()調用除了會複製父進程的所有已打開文件描述符, 還會複製父進程的緩存到子進程中.
終端stdout是行緩存的
普通文件的緩存是基於長度的, 也就是說輸出到普通文件的數據, 在緩存後, 只有達到了緩存上限, 或者手動調用 flush/sync 等系統調用刷新, 纔會清空緩存並刷新到文件中