gpt4 book ai didi

c - 管道导致进程卡住

转载 作者:行者123 更新时间:2023-11-30 15:23:27 25 4
gpt4 key购买 nike

程序report启动两个accessed进程。报告基本上提供访问文件名列表和访问打印(如果它们在x天内被访问过)。

但是,我的实现导致 accessed 以某种方式卡住。运行reports后,没有打印任何内容。当我运行 ps 时,我可以看到两个访问的 程序卡在周围,没有死掉。

起初,我认为accessed中从stdin读取的方法是错误的,但我手动将一些文件名通过管道传递给它cat filenames.txt | ./accessed,并且它有效。所以report程序一定是错误的。

我将 gdb 附加到卡住的accessed进程,它似乎在 while 循环getline处被卡住。因此,我将 while 循环更改为单个 getline 语句,它突然起作用了。但是,我需要读取 stdin 直到 EOF。非常感谢任何有关可能的错误来源的帮助。这让我非常头疼。

原理图:

--------
| |--------> Access1 ---> print stuff out
|report|
|______|--------> Access2 ----> print stuff out

最佳答案

每个进程关闭自己的输入管道(在 dup2'ing 读取端之后)。

但是,它们使其他进程的输入管道保持打开状态。即使在父进程关闭它之后,每个进程也永远不会看到 EOF,因为其他子进程可能决定向其发送数据。

子进程应该关闭彼此的管道(或者在不继承其他进程的管道的情况下启动)。

关于c - 管道导致进程卡住,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28790042/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com