我正在看fork上的一些簡單的代碼,並決定自己嘗試一下。我編譯並從Emacs內部運行它,並獲得了不同的輸出到在Bash中運行它所產生的輸出。當我管輸出時,爲什麼我的分岔程序的輸出不同?
#include <unistd.h>
#include <stdio.h>
int main() {
if (fork() != 0) {
printf("%d: X\n", getpid());
}
if (fork() != 0) {
printf("%d: Y\n", getpid());
}
printf("%d: Z\n", getpid());
}
我用gcc編譯它,然後跑的a.out從在Emacs,以及它管道傳輸到cat
,並grep .
,並得到了這一點。
2055:X
2055:Y
2055位:Z
2055:X
2058位:Z
2057:Y
2057位:Z
2059位:Z
這是不對的。剛剛從猛砸運行它,我得到(我希望)
2084:X
2084:Y
2084位:Z
2085:Y
2085位:Z
2087位:Z
2086: ž
編輯 - 錯過了一些新行
發生了什麼事?
你爲什麼通過任何東西(特別是「貓」,它根本不會做任何事情)管道結果? - 哦,等待它是引入奇怪的管道...嗯... – Pointy 2011-01-20 17:08:31
我可以重現這一點,所以它不是宇宙射線或任何東西。耐人尋味。請注意,前一個輸出中缺少一個PID(2056);這可能是`cat`的PID。 – Thomas 2011-01-20 17:11:11