信号机制及实现

信号机制

概念:信号是在软件层次上对中断机制的一种模拟,是一种异步通信方式
所有信号的产生及处理全部都是由内核完成的

信号的产生:
1 按键产生
2 系统调用函数产生(比如raise, kill)
3 硬件异常
4 命令行产生 (kill)
5 软件条件(比如被0除,访问非法内存等)

信号处理方式:
1 缺省方式
2 忽略信号
3 捕捉信号

常用信号:

信号名 含义 默认操作
SIGHUP 该信号在用户终端关闭时产生,通常是发给和该终端关联的会话内的所有进程 终止
SIGINT 该信号在用户键入INTR字符(Ctrl-C)时产生,内核发送此信号送到当前终端的所有前台进程 终止
SIGQUIT 该信号和SIGINT类似,但由QUIT字符(通常是Ctrl-)来产生 终止
SIGILL 该信号在一个进程企图执行一条非法指令时产生 终止
SIGSEV 该信号在非法访问内存时产生,如野指针、缓冲区溢出 终止
SIGPIPE 当进程往一个没有读端的管道中写入时产生,代表“管道断裂” 终止
SIGKILL 该信号用来结束进程,并且不能被捕捉和忽略 终止
SIGSTOP 该信号用于暂停进程,并且不能被捕捉和忽略 暂停进程
SIGTSTP 该信号用于暂停进程,用户可键入SUSP字符(通常是Ctrl-Z)发出这个信号 暂停进程
SIGCONT 该信号让进程进入运行态 继续运行
SIGALRM 该信号用于通知进程定时器时间已到 终止
SIGUSR1/2 该信号保留给用户程序使用 终止
SIGCHLD 是子进程状态改变发给父进程的。 忽略

信号命令:

信号发送的函数:

定时器函数

信号的捕捉

信号机制及实现

信号集、信号屏蔽和阻塞

有时候不希望在接到信号时就立即停止当前执行,去处理信号,同时也不希望忽略该信号,而是延时一段时间去调用信号处理函数。这种情况可以通过阻塞信号实现。
信号的阻塞概念:信号的”阻塞“是一个开关动作,指的是阻止信号被处理,但不是阻止信号产生。

信号机制及实现

信号的状态:
信号递达(Delivery ):实际信号执行的处理过程(3种状态:忽略,执行默认动作,捕获)
信号未决(Pending):从产生到递达之间的状态

信号集操作函数

设定对信号集内的信号的处理方式(阻塞或不阻塞)

首先,若oset是非空指针,那么进程的当前信号屏蔽字通过oset返回。

其次,若set是一个非空指针,则参数how指示如何修改当前信号屏蔽字。

how可选用的值:(注意,不能阻塞SIGKILL和SIGSTOP信号)

示例-实现信号来了不打断程序,等程序做完相应的事情再响应信号(通过设置SIGINT信号,当按下ctrl+c时,没有打印,过了五秒钟后自动打印。)

来源:仙八哥

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2022年3月4日
下一篇 2022年3月4日

相关推荐