这个问题已经在这里有了答案:
已关闭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/