[英]pipe causing processes to freeze
程序report
啟動兩個accessed
過程。 基本上,報表Feed accessed
文件名列表和accessed
打印文件(如果在x天之內被訪問過)。
但是,我的實現導致accessed
以某種方式凍結。 運行reports
,什么都不會打印。 當我運行ps
,我可以看到有兩個accessed
程序在運行,沒有死。
起初,我以為從標准輸入讀取的方法是錯誤的accessed
,但我手動管道部分文件名給它cat filenames.txt | ./accessed
cat filenames.txt | ./accessed
,它可以工作。 因此, report
程序一定是錯誤的。
我將gdb附加到凍結的accessed
進程中,似乎它在while循環getline
凍結了。 因此,我將while循環更改為單個getline
語句,它突然起作用了。 但是,我需要讀stdin
直到EOF。 非常感謝對可能的錯誤源的任何幫助。 這讓我很頭疼。
示意圖:
--------
| |--------> Access1 ---> print stuff out
|report|
|______|--------> Access2 ----> print stuff out
每個進程都關閉自己的輸入管道(在讀取端dup2之后)。
但是,它們使另一個進程的輸入管道保持打開狀態。 即使在父進程關閉后,每個人也永遠不會看到EOF,因為存在另一個子進程可能決定向其發送數據的可能性。
子進程應關閉彼此的管道(或在不繼承其他進程的管道的情況下啟動)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.