我正在做一個任務來構建一個簡單的shell,我試圖添加一些不需要的功能,但我正在運行管道問題。叉和等待 - 如何等待所有的孫子完成
一旦我的命令被解析,我分叉一個進程來執行它們。這個過程是一個子程序,它將執行該命令,如果只剩下一個,否則它將分叉。父母將執行第一個命令,孩子將處理其餘的部分。管道設置正常。
我的主進程然後調用wait()
,然後輸出提示。當我執行一個像ls -la | cat
這樣的命令時,在貓的輸出之前會打印提示。
我試着爲每個應該執行的命令調用wait()
一次,但第一個調用起作用,所有連續調用都返回ECHILD
。
我該如何強制我的主線等到所有的孩子,包括孩子的孩子都退出?
好的,我看到bash只是簡單地將所有的孩子都趕走了主流程。這將使管道設置更復雜一些,但應該工作。 – Dan