关于捕获SIGPIPE信号的问题?

wsy24680 2017-07-24 05:20:16

static void signal_handler(int signum)
{
switch (signum)
{
case SIGINT:
printf("signum=SIGINT");
break;
case SIGPIPE:
printf("signum=SIGPIPE"); //无法捕获SIGPIPE
break;
}
}
static void setup_signal_handlers()
{
struct sigaction act;
act.sa_handler = signal_handler;
sigemptyset(&act.sa_mask);
act.sa_flags = 0;
sigaction(SIGINT, &act, NULL);
sigaction(SIGPIPE, &act, NULL);
}


执行命令:
kill -s 1 15155 //可以捕获SIGINT
kill -s 13 15155 //无法捕获SIGPIPE

为什么无法捕获到SIGPIPE信号呢???
...全文
266 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
jklinux 2017-07-24
  • 打赏
  • 举报
回复
引用 2 楼 wsy24680 的回复:
[quote=引用 1 楼 ipqtjmqj 的回复:] 首先,SIGINT是2 ,1是SIGHUP。 其次,看起来没捕捉到的原因是printf为行缓存,多加个\n就可以打印出来
\n加了 还是没有打印出来 加了断点没有用[/quote] 加个换行号符是需要的,还有你kill时发错信号了, 你的代码里只捕捉SIGINT, SIGPIPE信号, 信号的值分别是2, 13. 你kill -s 1时,你的进程接收到SIGHUP信号后会进程退出的,你后面再kill发信号时应会报没这个进程的.
wsy24680 2017-07-24
  • 打赏
  • 举报
回复
引用 1 楼 ipqtjmqj 的回复:
首先,SIGINT是2 ,1是SIGHUP。 其次,看起来没捕捉到的原因是printf为行缓存,多加个\n就可以打印出来
\n加了 还是没有打印出来 加了断点没有用
ipqtjmqj 2017-07-24
  • 打赏
  • 举报
回复
首先,SIGINT是2 ,1是SIGHUP。 其次,看起来没捕捉到的原因是printf为行缓存,多加个\n就可以打印出来

23,115

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧