gpt4 book ai didi

c++ - 打开 FIFO(命名管道)卡住 - 忽略 SIGINT、SIGTERM

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:28:48 29 4
gpt4 key购买 nike

我正在使用命名管道在分支进程之间进行通信。每个进程处理 SIGINTSIGTERM,然后关闭其管道末端并进行清理。

如果信号在我 fork 进程时恰好发生,则进程在尝试打开管道时挂起(因为另一端已经关闭它 - 或者另一端可能不再被初始化)。

现在我的应用程序卡住了,等待管道打开。因为进程是相互通信的 fork 兄弟,所以我无法确定进程 A 在进程 B 之前设置了管道的末端 - 即我看不到使用 O_NONBLOCK 的方法(至少没有连续尝试设置它)。

从管道读取时,信号似乎可以正常中止。只是管道的开口被锁住了。

有什么想法吗?

最佳答案

我改为采用非阻塞方法。我忙着等待(短暂的 sleep ),直到管道建立或发出终止信号。

阅读和写作的工作原理相似。如果没有可用数据(读取 0 个字节),那么我将等待并重试。如果出现错误,我会处理它,如果没有发出信号,请重试(因为这需要在后台运行而不是拆除应用程序)。

设置一个额外的通信 channel 只是为了同步关闭(加上正确处理)是非常困难的。

关于c++ - 打开 FIFO(命名管道)卡住 - 忽略 SIGINT、SIGTERM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30527056/

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