的目標考慮下面的源,減小爲簡單起見「多個」管道命令中斷的bash
int main()
{
int d[2];
pipe(d);
if(fork())
{
close(1);
dup(d[1]);
execlp("ls", "ls", NULL);
}
else
{
close(0);
dup(d[0]);
execlp("cat", "cat", NULL);
}
}
所以它創建一個管道和輸出從ls
到cat
重定向。
它工作得很好,沒有問題。但改變cat
爲more
和bash休息。
的症狀是:
- 你沒有看到任何你鍵入
- 按「ENTER」顯示了一個新的提示,而不是在一個新的生產線,但在同一個
- 你可以執行任何命令並看到輸出
reset
有助於解決問題。
因此,鍵盤輸入存在問題,它在那裏,但不可見。
這是爲什麼?
UPDATE:
- 從
ls | more
輸出相當於我的程序的輸出 more
過程沒有完成,它是由ls
- 唯一可見的問題,孤兒是狀態父進程退出後的控制檯在某些系統上退出
- 它確實按預期工作。例如,在OpenSUSE上,我在Kubuntu上沒有問題。我找不到,我應該尋找什麼區別的任何信息,
more
二進制文件是在兩個系統上
它在我的系統上正常工作,具有'more' .. – Omkant
有趣。在我的其他系統上它也可以工作。所以它適用於OpenSUSE,但不適用於Kubuntu。這更糟糕:/ –
立即更新。 –