【发布时间】:2015-06-12 09:06:44
【问题描述】:
我知道SIGPIPE 和SIGIGN 的各自用途。
是什么
signal(SIGPIPE, SIG_IGN);
确实如此?
【问题讨论】:
我知道SIGPIPE 和SIGIGN 的各自用途。
是什么
signal(SIGPIPE, SIG_IGN);
确实如此?
【问题讨论】:
signal(SIGPIPE, SIG_IGN);
简单地忽略信号SIGPIPE。将SIG_IGN 作为handler 传递会忽略给定的信号(信号SIGKILL 和SIGSTOP 除外,它们不能被捕获或忽略)。
顺便说一句,通常建议使用sigaction(2) 而不是signal(2),因为sigaction 提供更好的控制,并且在某些系统上也不需要“重置”处理程序(遵循 System V 信号行为) .
【讨论】:
signal(SIGPIPE, SIG_DFL);。
signal() 还返回之前安装的处理程序。所以一个干净的重置应该是:void (*old)(int); old = signal(some_signal,some_handler); ... signal(some_signal,old);。无论如何,signal 是旧的(被认为是过时的)接口,你应该使用sigaction 是地方。