代码之家  ›  专栏  ›  技术社区  ›  Idan K

发送(2)接收信号管的目的是什么?[副本]

  •  3
  • Idan K  · 技术社区  · 14 年前

    可能重复:
    Why is writing a closed TCP socket worse than reading one?

    为什么错误的返回值不够?
    在一个信号处理程序中,我可以做什么?我不能通过测试epipe的返回值来做什么?

    2 回复  |  直到 7 年前
        1
  •  1
  •   Blagovest Buyukliev    9 年前

    在过去,几乎每一个信号都会导致一个Unix程序终止。因为管道的进程间通信是Unix的基础, SIGPIPE 旨在终止未处理的程序 write(2) / read(2) 错误。

    假设有两个进程通过管道进行通信。如果其中一个死了,管道的一端将不再处于活动状态。 信号管 也打算杀死另一个进程。

    例如,考虑:

    cat myfile | grep find_something
    

    如果 cat 在读取文件的过程中被杀, grep 只是没有什么可以做的了,被一个 信号管 信号。如果没有发送信号, 格雷普 没有检查的返回值 read , 小精灵 会在某种程度上行为不端。

        2
  •  0
  •   casablanca    14 年前

    和其他许多事情一样,我的猜测是,这仅仅是一个设计选择,有人最终把它变成了POSIX标准,并一直保留到现在。有人可能认为试图通过一个封闭的套接字发送数据是一件坏事,而且您的程序需要立即得到通知,而且由于没有人检查过错误代码,有什么比发送信号更好的方法来通知您呢?