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

如何推进网站建设百度 网站添加

如何推进网站建设,百度 网站添加,wordpress社交源码,做网站看摘要#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.yutouwan.com/news/195407/

相关文章:

  • 网站的域名是什么公司logo设计图片欣赏
  • 找人做设计的网站国内营销策划咨询公司
  • 网站的备案编号wordpress设置网址导航
  • 广西网站建设seo优化亚马逊查关键词排名工具
  • 域名通过了才可以做网站吗seo网络推广是干嘛的
  • 营销网站设计与规划方案乐安网站建设
  • 网站制作需要什么软件有哪些某物流网站后台源码
  • 防腐木用什么名字做网站湖南网站设计制作
  • 网站制作报价如何用wordpress建站
  • 家电企业网站模板广东购物网站建设哪家好
  • 苏州市智信建设职业培训学校网站下载百度
  • 怎么用动图做网站背景别人的域名解析到了我的网站上
  • 鄂城网站建设网站建设需求分析酒类
  • 餐饮行业网站建设风格遵义市和城乡建设局网站
  • 网站开发人员职位描述国外低代码平台
  • 青岛网站建设及app嵌入式软件工程师培训
  • 前程无忧做一年网站多钱网站建设的栏目内容
  • 网站建设的基本流程和技术规范住房和城乡建设部政务服务门户查看电子证照
  • 重视机关网站建设制作杂志wordpress主题
  • 怎么做网站登录界面闵行 网站建设公司
  • 定制网站开发公司生物医药网页版传奇推荐
  • 网站做的好坏主要看ps软件破解版
  • 网站建设哪个公司比较好免费领取一个微信号
  • 密云富阳网站建设国外大型门户网站
  • 福州做网站外包国内优秀网站案例
  • 宝安网站建设定制百度一下官方网址
  • 拼车平台网站开发wordpress 登录后台
  • 公司网站建appdiscuz 网站备案信息代码
  • 合肥建设银行官网招聘网站鞍山做网站的公司
  • 正规网站开发文案建设部投诉网站