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

网站推广的看法免费公司邮箱怎么申请注册

网站推广的看法,免费公司邮箱怎么申请注册,石青网站推广软件,阳江网红景点信号捕捉 一.sigaction1.基本使用2.sa_mask字段 二.可重入函数三.volatile四.SIGCHLD信号 承接上文 果信号的处理动作是用户自定义函数,在信号递达时就调用这个函数,这称为捕捉信号。由于信号处理函数的代码是在用户空间的,处理过程比较复杂,举例如下: 用户程序注册了SIGQUIT信… 信号捕捉 一.sigaction1.基本使用2.sa_mask字段 二.可重入函数三.volatile四.SIGCHLD信号 承接上文 果信号的处理动作是用户自定义函数,在信号递达时就调用这个函数,这称为捕捉信号。由于信号处理函数的代码是在用户空间的,处理过程比较复杂,举例如下: 用户程序注册了SIGQUIT信号的处理函数sighandler。 当前正在执行main函数,这时发生中断或异常切换到内核态。在中断处理完毕后要返回用户态的main函数之前检查到有信号SIGQUIT递达。内核决定返回用户态后不是恢复main函数的上下文继续执行,而是执行sighandler函数,sighandler和main函数使用不同的堆栈空间,它们之间不存在调用和被调用的关系,是 两个独立的控流程。sighandler函数返回后自动执行特殊的系统调用sigreturn再次进入内核态。 如果没有新的信号要递达,这次再返回用户态就是恢复main函数的上下文继续执行了。 一.sigaction 1.基本使用 前面已经聊过signal函数了这里就不再赘述。 第一个参数是传入的信号种类。 第二个和第三个参数都是struct sigaction类型结构体前面一个是输入型参数代表你要执行的动作后一个是输出型参数会把原本的信息带出方便之后恢复。 返回值成功返回0失败返回-1. 例子 前面我们说过信号在发送后操作系统会把pending位图的该信号位置置1当处理该信号时将位图置零然后执行方法。那么究竟是先置零再执行方法还是方法执行完成后再置零呢 在handler方法里打印pending图即可看出先后顺序 从结果看出操作系统是先将pending位图置零再调用方法。 2.sa_mask字段 当某个信号的处理函数被调用时,内核自动将当前信号加入进程的信号屏蔽字,当信号处理函数返回时自动恢复原来的信号屏蔽字,这样就保证了在处理某个信号时,如果这种信号再次产生,那么 它会被阻塞到当前处理结束为止。 如果在调用信号处理函数时,除了当前信号被自动屏蔽之外,还希望自动屏蔽另外一些信号,则用sa_mask字段说明这些需要额外屏蔽的信号,当信号处理函数返回时自动恢复原来的信号屏蔽字。sa_flags字段包含一些选项,本章的代码都把sa_flags设为0,sa_sigaction是实时信号的处理函数。 总之就是防止信号进行嵌套调用。 对比实验一般情况下如果我们一直发2号信号那么在处理2号信号时其他2号信号一直会阻塞pending图对应位置为1 在调用2号信号时同时屏蔽3号信号 二.可重入函数 例子链表头插 一个链表进行头插时不带哨兵节点分为两步先是p-nexthead接着是headp。那么当代码执行到第一步时突然接收到信号而跑去进行信号中断了这里并没有调用系统函数为什么能够实现内核态和用户态的转变从而进行信号中断呢因为操作系统同时会执行多个进程而为了让这些进程同时都被执行操作系统会来回切换这些进程从而不断的进行用户态和内核态的转变。正巧我们对该信号的捕捉方法也是使用insert进行头插那么程序就会再让另一个节点指向head。接着信号处理完毕再返回继续执行第二步head-p。对于这种一个函数被重复调用的情况被称为函数重入。 以上就出现了问题虽然node1节点插入成功了但我们丢失了node2节点从而导致了内存泄漏。 如果一个函数被重复进入的情况下可能出错那么就被叫做不可重入函数。否则就被叫做可重入函数。目前的大部分函数都是不可重入的 三.volatile 核心作用防止编译器过度优化保存内存可见性。 一个例子 这里的原理很简单发送2信号后改变flag的值就不再死循环但由于我们并未对flagj进行其他使用如果我们启用编译器的优化功能会发生不同的现象。 常见的优化是O0~O3这里使用O1优化。 可以看到我们发送了信号2后程序也并没有结束循环。这是为什么呢 为了防止出现变量的过度优化我们就可以使用volatile。 四.SIGCHLD信号 进程一章讲过用wait和waitpid函数清理僵尸进程,父进程可以阻塞等待子进程结束,也可以非阻塞地查询是否有子进程结束等待清理(也就是轮询的方式)。采用第一种方式,父进程阻塞了就不能处理自己的工作了;采用第二种方式,父进程在处理自己的工作的同时还要记得时不时地轮询一下,程序实现复杂。 其实,子进程在终止时会给父进程发SIGCHLD信号,该信号的默认处理动作是忽略,父进程可以自定义SIGCHLD信号的处理函数,这样父进程只需专心处理自己的工作,不必关心子进程了,子进程 终止时会通知父进程,父进程在信号处理函数中调用wait清理子进程即可。 验证 所以在进行进程等待时我们可以采用基于信号的方式等待。 事实上,由于UNIX 的历史原因,要想不产生僵尸进程还有另外一种办法:父进程调 用sigaction将SIGCHLD的处理动作置为SIG_IGN,这样fork出来的子进程在终止时会自动清理掉,不会产生僵尸进程,也不会通知父进程。系统默认的忽略动作和用户用sigaction函数自定义的忽略 通常是没有区别的,但这是一个特例。此方法对于Linux可用,但不保证在其它UNIX系统上都可用。 平常我们创建子进程后并没有主动释放但也并没有影响因为Linux默认把17号信号设置成了SIG_IGN。
http://www.hkea.cn/news/14545753/

相关文章:

  • 网站建设需要租赁服务器吗网站建设心得总结
  • 长沙网站关键词seo互联网推广的优势
  • asp.net 怎样生成网站建设门户网站费用
  • 青岛网站优化排名oa系统怎么用
  • 施工企业会计案例分析论文保定百度推广优化排名
  • WordPress建站教程 网盘手机网站设计案例
  • 在线做头像网站开封市做网站的公司
  • 贵州网站制作品牌公司网站查询器
  • 建设一个国外服务器的网站福建微网站建设价格
  • 广州做网站需要多少钱呼市品牌网站建设那家好
  • 恩施市住房和城乡建设局网站手机网站建设 技术规范
  • 昆明网站开发培训机构做计算机项目的网站
  • 建设科普网站的意义达内ui设计培训费用
  • 济南建网站公司报价网站建设哪个便宜
  • 北京住房和城乡建设部网站wordpress中文版源码下载
  • nodejs建设直播网站正规软件开发培训学校
  • 虚拟网站建设指导公司网站建设如何撤销
  • 网站优点网站建设制作定制
  • 天津市建设与管理网站工业设计公司是做什么的
  • 一个网站有多少网页wordpress改变访问目录
  • 从化网站建设推广wordpress 虚幻大学
  • 辽宁网站设计宁波外贸公司排名前五十
  • 怎么申请一个免费域名长安seo排名优化培训
  • php网站开发图文教程上海源码网站建设公司
  • 全网通网站建设信息展示网站系统
  • 行业门户网站建设费用深圳人口1756万
  • 白和黑人做网站网页版qq空间怎么看特别关心
  • 网站建设流程方案响应式旅游网站模板
  • 做网站策划书文档广西建设网站网址多少
  • 专做影视评论的网站app推广多少钱一个