打开FIFO(命名管道)冻结-忽略SIGINT, SIGTERM
open on FIFO (named pipe) freezes - ignores SIGINT, SIGTERM
我使用命名管道在分支进程之间进行通信。每个进程处理SIGINT
和SIGTERM
,然后关闭其管道末端并进行清理。
如果信号发生在我fork一个进程的时候,那么这个进程在试图打开管道的时候挂起(因为另一端已经关闭了它——或者另一端可能不再初始化)。
现在我的应用程序卡在等待管道打开。因为进程是相互通信的分支兄弟进程,我不能确定进程A在进程B之前设置了管道的末端-也就是说,我看不到使用O_NONBLOCK
的方法(至少在没有连续尝试设置它的情况下)。
从管道中读取时,信号似乎很好地中止了它。这只是管道的开口锁住了。
任何想法?
我选择了一种非阻塞的方法。我忙等待(有短暂的睡眠),直到管道建立或终止信号。
阅读和写作是相似的。如果没有可用的数据(读取0字节),则等待并重试。如果发生错误,我处理它,如果没有信号,再试一次(因为这需要在后台运行,而不是撕毁应用程序)。
设置一个额外的通信通道来同步关机(加上正确处理)是相当困难的。
相关文章:
- 在fstream期间忽略空行
- 概念TS检查忽略私有访问修饰符
- C++宏忽略之后的内容
- 不知道某个东西是否被忽略会引入未定义的行为吗
- clang整洁10忽略了我的NOLINT命令
- If语句在c++中被忽略
- 错误:在为指针赋值时,void值没有被忽略
- 为什么stream::忽略未按预期工作
- Craps游戏问题,忽略if语句
- c++字符串中的字符将被忽略
- 为什么在 x64 中忽略__stdcall调用约定?
- 为什么C++的文件 I/O 在读取文本文件时忽略初始空行?我怎样才能让它不这样做?
- MSVC 忽略 [[maybe_unused]] 的功能?
- 警告:在函数返回类型 [-Wignore 限定符] 时忽略类型限定符
- Pytorch torch.cholesky忽略异常
- C++ - 忽略并从其他文件获取数据
- 如何忽略输入流中的某些字符?
- 调用系统(3)时忽略了SIGINT
- SIG_IGN忽略SIGINT信号失败
- 打开FIFO(命名管道)冻结-忽略SIGINT, SIGTERM