当前位置: 首页 > 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://wiki.neutronadmin.com/news/195407/

相关文章:

  • 微信网站协议书wordpress 多站点 主站点
  • 贷款网站开发苏州交通网站建设
  • 南昌网站建设基本流程网站备案授权书怎么填写
  • 长春h5建站自建站有哪些站点
  • 安徽搜索引擎推广公司东莞短视频seo制作
  • 网站要不要备案网站加载很慢怎么办
  • 卖渔具的亲戚做网站wordpress 修改目录权限设置密码
  • 专业商城网站建设多少钱汕头网站设计多少钱
  • drupal个人门户网站开发贸易公司取名字大全
  • 深圳都信建设监理有限公司网站如何解决网站兼容
  • 做网站用的文本编辑器企业网站建设效果
  • 亿唐为什么2005年做虚拟网站面试个人简历范文及网站建设
  • 在百度上做网站多少钱百度营销后台
  • 水果香精东莞网站建设技术支持知更鸟wordpress
  • 牙科 网站建设方案icp备案网站信息
  • 响应式设计网站手机百度云网页版登录
  • 英语网站开发的背景wordpress设置静态页
  • ICO网站模板国际新闻最新消息今天233
  • 字画价格网站建设方案闵行网站制作哪里有
  • 如何让域名指向网站ih5制作软件
  • 重庆模板网站建设费用做电影网站怎么盈利
  • 做网站设计累吗芍药居网站建设公司
  • 娄底市网站建设制作申请网站域名多少钱
  • 锦州网站制作公司导购网站怎么做有特色
  • 0元购怎么在网站做中国航天空间站最新消息
  • 哪里有学做ppt的网站商城分销模式
  • 信用 网站 建设方案直播网站开发需要多少钱
  • 哪个网站百度收录快wordpress主题lovephoto
  • 做外链那些网站比较好网站界面设计形考
  • lamp网站开发制作三星网上商城投诉电话