进程的阻塞
一. 产生阻塞的原因
-
1. 写入阻塞
- 如果没有进程从管道的读取端读取数据,写入操作会阻塞,直到有进程从管道的读取端读取数据为止。
- 如果输入缓冲区满了也会阻塞
-
2. 读取阻塞
1.如果读取端尝试从管道读取数据时,如果没有进程向管道的写入端写入数据,读取操作也会阻塞,直到有数据可读为止。
2.当缓冲区为空时会阻塞
二. 管道什么时候是打开的
如果仅仅open管道文件不算打开管道,需要在open之后有read和write管道才算打开
三. 如何处理进程crush
-
1.当输入端进程crush
此时read函数会自动返回0,不会产生阻塞。** 可以用这个特性来检测是否接收端发生crush。**
-
2.当接收端进程crush
此时write函数会产生SIGPIPE错误信号,我们可以通过使用截取错误信号来检测处理该问题。
四. 管道文件不支持lssek
因为管道文件是一种流式通道,随机访问的话会造成进程间通讯数据的丢失。
五. 如何取消默认管道阻塞
- 使用fcntl函数
- 使用 open(PIPE, O_WRONLY | O_NONBLOCK);加参数O_NONBLOCK
原文地址:https://blog.csdn.net/m0_74096786/article/details/140385947
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!