操作系统的信号机制详细介绍物业
信号是unix中所使用的进程通信的一种最古老的方法。系统使用它来同志一个或多个进程异步事件的发生。 linux系统库bits/signum.h对信号名作了定义: linux的大多数信号是提供给内核的,仅有少数几种信号可以在信号间发送。 .SIGHUP 当终止一个终端时,内核就把这种信号发送给该终端所控制的所有进程。 .SIGINT 当一个用户按下中断键(ctrl+c)后,内核就向该终端用关联的所有进程发送这个信号。 .SIGQUIT 当用户按下(ctrl+),内核就向该终端用关联的所有进程发送这个信号。 .SIGILL 当一个进程企图执行一条非法指令时,内核就发送这个信号。 .SIGFPE 当产生浮点错误时,内核就发送这个信号。 .SIGKILL 这是一个非常特殊的信号,他可以从一个进程发送到另一个进程,使接收到该信号的进程终止。内核偶然也发送这种信号。 .SIGALRM 当一个定时器到时的时候,内核就发送这个信号。 .SIGSTOP 子进程结束信号.UNIX用它来实现系统调用exit(),wait(); 信号的处理 unix的系统调用signal()用于接受一个指定的信号,并可以指定相应的处理方法。 在linux系统库signal.h中,它的说明如下: signal(int sig,sighandler_t handler); sig用于指定信号类型。handle是用于处理该信号的函数。 handle还可以是: .SIG_IGN 忽略这个信号。 .SIG_DFL 恢复对这个信号的默认处理。 例如: #include #include #include main(){ signal(SIGINT,SIG_IGN); printf(\"hello!n\"); sleep(10); printf(\"hellon\"); }
这意味着顶层设计已经开启。此后 上面的代码忽略了SININT信号。 又例如: #include #include #include int catch(int sig); main(){ signal(SIGINT,catch); printf(\"hello!n\"); sleep(10); printf(\"hello!n\"); } int catch(int sig){ printf(\"catch signaln\"); return 1; }
当用户按下ctrl+c时,进程被中断,catch()被执行.中断处理函数处理完毕后,转回断点执行下面的指令。 当编写自己的中断处理函数时,注意下面两点: 1.信号不能打断系统调用。 2.信号不能打断信号处理函数。
小儿积食吃什么药南昌妇科习惯性流产治疗哪家好
骨关节炎疼吃什么药好
- 相士去朋友家喝酒,路遇全都,慌忙对朋友说:你的富贵就靠此人了
- 明日方舟SS绿野幻梦前三关挂机攻略全程用两位基石探员轻松打穿
- 结婚后,别和异性朋友聊这些“暧昧”话题,除非你打算越界
- 俄官员:拉脱维亚军方袭击俄边境村庄 造成1人受伤
- 十条段子:爸爸,别的不好时说,找老婆比你的好还是有把握的!
- 阿奇姆甘领衔深足4大外援,申花6名国脚缺席4个月,难道要去中甲找大连?
- 国美零售全链路简化不断升级 腾讯华为注入数智力量
- ----:愈发成熟的广厦三少 已成为最好的国内组合之一
- 曝曼联今夏给贝格哈格1-1.5亿镑预算 计划购三名新援
- 第三站康乐社区!讲文明知写作,为社区青少年种下德育可食用
- 积极支持为什么不喜欢“老实人”?
- 给狗狗剪尾和剪耳的小技巧位置