【问题标题】:What does signal(SIGPIPE, SIG_IGN); do?什么信号(SIGPIPE,SIG_IGN);做?
【发布时间】:2015-06-12 09:06:44
【问题描述】:

我知道SIGPIPESIGIGN 的各自用途。

是什么

signal(SIGPIPE, SIG_IGN);

确实如此?

【问题讨论】:

标签: c unix signals


【解决方案1】:
signal(SIGPIPE, SIG_IGN);

简单地忽略信号SIGPIPE。将SIG_IGN 作为handler 传递会忽略给定的信号(信号SIGKILLSIGSTOP 除外,它们不能被捕获或忽略)。

顺便说一句,通常建议使用sigaction(2) 而不是signal(2),因为sigaction 提供更好的控制,并且在某些系统上也不需要“重置”处理程序(遵循 System V 信号行为) .

【讨论】:

  • 如果之前已经设置过这个处理程序,我们也可以取消设置它吗?
  • 你可以再次调用signal(2)来重置它。例如,要将其重置为默认行为,请调用:signal(SIGPIPE, SIG_DFL);
  • signal() 还返回之前安装的处理程序。所以一个干净的重置应该是:void (*old)(int); old = signal(some_signal,some_handler); ... signal(some_signal,old);。无论如何,signal 是旧的(被认为是过时的)接口,你应该使用sigaction 是地方。
  • 如何在忽略 SIGPIPE 信号后立即在代码中执行某些操作,例如 ` printf("SIGPIPE signal detected!") `
  • 不确定我是否理解“忽略给定的信号忽略它”
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-08-20
  • 2011-12-08
  • 2021-05-19
  • 1970-01-01
  • 2013-09-26
  • 2016-03-23
  • 1970-01-01
相关资源
最近更新 更多