这个问题已经在这里有了答案:




已关闭10年。






为什么错误的返回值不能满足要求?
通过测试EPIPE的返回值,我不能在信号处理程序中做什么?

最佳答案

过去,几乎所有信号都导致Unix程序终止。因为管道的进程间通信在Unix中是基本的,所以SIGPIPE旨在终止不处理write(2)/read(2)错误的程序。

假设您有两个通过管道进行通信的进程。如果其中之一死亡,则管道的一端不再 Activity 。 SIGPIPE也打算杀死其他进程。

例如,请考虑:

cat myfile | grep find_something

如果cat在读取文件的过程中被杀死,则grep根本不再需要做什么,并被SIGPIPE信号杀死。如果没有信号发送,并且grep没有检查read的返回值,则grep会以某种方式出现异常。

关于c - send(2)接收SIGPIPE的目的是什么? [复制],我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4137275/

10-11 17:57