簡體   English   中英

管道導致過程凍結

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM