主题 : 求解信号阻塞后还能打断系统调用是为什么 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 47698
精华: 0
发帖: 5
金钱: 25 两
威望: 5 点
综合积分: 10 分
注册时间: 2011-05-24
最后登录: 2011-07-28
楼主  发表于: 2011-07-21 09:17

 求解信号阻塞后还能打断系统调用是为什么

我用signal设置了一个SIGALRM信号处理函数timer_handler(),然后用setitime设置了100ms产生一次SIGALRM信号,此时程序运行一切正常,timer_handler()执行也正常。
但是当我用sigprocmask()阻塞SIGALRM信号(阻塞10 秒),发现timer_handler()还是每100ms执行一次,而且进程里的一个线程中的msgrcv()调用开始每100ms返回一次-1(就是被信号打断了,因为使用signal所以没有设置重启调用),我想问问有人知道是为什么吗?信号没阻塞前msgrcv()没被打断过,阻塞了反而被打断,而且信号处理函数还在执行?
级别: 新手上路
UID: 47698
精华: 0
发帖: 5
金钱: 25 两
威望: 5 点
综合积分: 10 分
注册时间: 2011-05-24
最后登录: 2011-07-28
1楼  发表于: 2011-07-21 09:39
没有人知道吗?
^很多问题的背后都是简单的原因......
级别: 荣誉会员
UID: 34780
精华: 0
发帖: 1219
金钱: 6230 两
威望: 1246 点
综合积分: 2438 分
注册时间: 2010-12-21
最后登录: 2017-09-18
2楼  发表于: 2011-07-21 10:22
建议你先man一下这几个函数, 了解一下具体功能和行为等等
级别: 新手上路
UID: 47698
精华: 0
发帖: 5
金钱: 25 两
威望: 5 点
综合积分: 10 分
注册时间: 2011-05-24
最后登录: 2011-07-28
3楼  发表于: 2011-07-21 15:00
能说具体点吗,我是开始接触LINUX