当前位置: 首页 > news >正文

白银做网站视频制作软件下载安装

白银做网站,视频制作软件下载安装,装潢设计图片三室一厅,做代练的网站摘要#xff1a; 在信号处理函数执行时#xff0c;会阻塞当前信号。当信号处理函数返回时#xff0c;系统会帮我们把刚刚阻塞的信号再从阻塞集中移除。一、 临时阻塞特性 当执行信号处理函数的时候#xff0c;会临时将当前被处理信号阻塞。为了能说明问题#xff0c;采用…摘要 在信号处理函数执行时会阻塞当前信号。当信号处理函数返回时系统会帮我们把刚刚阻塞的信号再从阻塞集中移除。一、 临时阻塞特性 当执行信号处理函数的时候会临时将当前被处理信号阻塞。为了能说明问题采用实验来验证。 下面这段程序在收到 SIGALRM 信号或者 SIGQUIT 信号时会打印当前信号同时打印当前被阻塞的信号。 测试代码 #include unistd.h #include signal.h #include setjmp.h #include stdio.hvoid printBlock() {sigset_t block;sigprocmask(SIG_BLOCK, NULL, block);printf(block:);if (sigismember(block, SIGQUIT)) printf(SIGQUIT, );if (sigismember(block, SIGALRM)) printf(SIGALRM\t);puts(); }void handler(int sig) {if (sig SIGQUIT) printf(SIGQUIT, );if (sig SIGALRM) printf(SIGALRM, );printBlock();puts(--------------------------------------------------); }int main() {printf(Im %d\n, getpid());signal(SIGQUIT, handler);signal(SIGALRM, handler);printf(before signal, );printBlock();while (1) {pause();}return 0; } 输出结果 结果分析 可以看到当程序收到 SIGALRM 信号时在信号处理函数中 SIGALRM 信号会被临时阻塞SIGQUIT 信号同理。 执行完毕再从阻塞信号集中移除我就不验证了。实际上你重复发送 SIGALRM 信号信号处理函数都能正常执行就已经证明 SIGALRM 信号未被阻塞当然了如果你手速比 cpu 运行的还快可能会有信号合并的情况这种不在考虑之列。   二、跳出你的信号处理函数  试想一下如果你在信号处理函数中使用 longjmp 跳走了系统会不会帮你把临时阻塞的信号给撤走答案是不会。这将导致程序 bug。从此以后你的程序再也不能处理该信号了。空口无凭用实验说话。 下面这段程序在信号处理函数中打印当前信号和当前被阻塞的信号。完成后没有直接 return而是使用 longjmp 跳转到 setjmp 的位置。接下来再打印阻塞信号。 测试代码 #include unistd.h #include signal.h #include setjmp.h #include stdio.hjmp_buf jmpbuf;void printBlock() {sigset_t block;sigprocmask(SIG_BLOCK, NULL, block);printf(block:);if (sigismember(block, SIGQUIT)) printf(SIGQUIT, );if (sigismember(block, SIGALRM)) printf(SIGALRM);puts(); }void handler(int sig) {if (sig SIGQUIT) printf(SIGQUIT, );if (sig SIGALRM) printf(SIGALRM, );printBlock();longjmp(jmpbuf, 1);puts(--------------------------------------------------); }int main() {printf(Im %d\n, getpid());signal(SIGQUIT, handler);signal(SIGALRM, handler);printf(before signal, );printBlock();if (setjmp(jmpbuf) ! 0) {printf(jump to here! );printBlock();puts();}while (1) {pause();}return 0; } 输出结果 结果分析 可以看到当 jump 到 main 函数中的时候SIGQUIT 依然被阻塞了SIGALRM 也是。此后无论你再怎么发送这两个信号处理函数也不会执行了。因为这两个信号没有从阻塞集中删除。 这是 bug。 解决方案是使用另外两个函数分别是 sigsetjmp 和 siglongjmp。所以我们只要把上面代码中的 setjmp 和 longjmp 分别替换成这两个函数就行了。   三、函数sigsetjump和siglongjump应用 1. 测试代码 #include unistd.h #include signal.h #include setjmp.h #include stdio.hjmp_buf jmpbuf;void printBlock() {sigset_t block;sigprocmask(SIG_BLOCK, NULL, block);printf(block:);if (sigismember(block, SIGQUIT)) printf(SIGQUIT, );if (sigismember(block, SIGALRM)) printf(SIGALRM);puts(); }void handler(int sig) {if (sig SIGQUIT) printf(SIGQUIT, );if (sig SIGALRM) printf(SIGALRM, );printBlock();siglongjmp(jmpbuf, 1); puts(--------------------------------------------------); }int main() {printf(Im %d\n, getpid());signal(SIGQUIT, handler);signal(SIGALRM, handler);printf(before signal, );printBlock();if (sigsetjmp(jmpbuf, 1) ! 0) {printf(jump to here! );printBlock();puts();}while(1) {pause();}return 0; } 输出结果  四、参考资料  1. 47-跳出信号处理函数
http://www.pierceye.com/news/233681/

相关文章:

  • 网站源码怎么预览建站技巧
  • 织梦网站会员功能化妆品网站建设描述
  • 手机app软件定制马鞍山seo
  • 重庆网站建设 九度互联响应式网站开发工具
  • 句容市建设工程管理处网站wordpress联系表格
  • 电商网站建设流程新能源汽车价格一览表
  • 实验室网站建设的调查报告海报设计图片手绘图
  • 征求网站建设买正品东西哪个网最好
  • 网站建公司生存响应式网站特点
  • 关于公司建设网站的意义网站后台html页面
  • 麻花星空影视传媒制作公司网站朋友帮忙做网站 费用多少
  • 海口网站建设呢做健身推广网站
  • 哈尔滨网站搜索优化苏州网站建设主页
  • 35互联网站建设怎么样设计工作室宣传文案
  • php做的网站如何该样式云服务器产品介绍
  • 个人网站建设论文绪论上海it公司有哪些
  • 建设网站推广广告图郑州妇科医院哪家好些
  • 自己网站wordpress主题怎么wordpress 功能块
  • 网站制作咨询电话网站建设技术员分为前端 后端
  • 9元建站节建材 团购 网站怎么做
  • 河南城乡住房和建设厅网站公司微信网站建设方案模板下载
  • 西安制作公司网站的公司邯郸市三建建筑公司网址
  • 网站建设工作目标惠州网站网站建设
  • 就业创业网站建设微信app下载安装旧版本
  • 沧州网站备案年栾洪全单页做网站教程
  • 网站开发的疑虑做门窗投标网站
  • 小型企业门户网站源码如何使用wordpress制作网站
  • 深圳网络营销网站建设北京建设网证书查询平台官网
  • 广播电台网站建设板块自己做网站导航页
  • 网站ui设计兼职android开发工具箱