自学内容网 自学内容网

进程的阻塞

一. 产生阻塞的原因

  • 1. 写入阻塞

    1. 如果没有进程从管道的读取端读取数据,写入操作会阻塞,直到有进程从管道的读取端读取数据为止。
    2. 如果输入缓冲区满了也会阻塞
  • 2. 读取阻塞

    1.如果读取端尝试从管道读取数据时,如果没有进程向管道的写入端写入数据,读取操作也会阻塞,直到有数据可读为止。
    2.当缓冲区为空时会阻塞

二. 管道什么时候是打开的

如果仅仅open管道文件不算打开管道,需要在open之后有read和write管道才算打开

三. 如何处理进程crush

  • 1.当输入端进程crush

    此时read函数会自动返回0,不会产生阻塞。** 可以用这个特性来检测是否接收端发生crush。**

  • 2.当接收端进程crush

    此时write函数会产生SIGPIPE错误信号,我们可以通过使用截取错误信号来检测处理该问题。

四. 管道文件不支持lssek

因为管道文件是一种流式通道,随机访问的话会造成进程间通讯数据的丢失。

五. 如何取消默认管道阻塞

  1. 使用fcntl函数
  2. 使用 open(PIPE, O_WRONLY | O_NONBLOCK);加参数O_NONBLOCK

原文地址:https://blog.csdn.net/m0_74096786/article/details/140385947

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!