Linux信号介绍
来源:互联网 发布:f3飞控调参软件cf 编辑:程序博客网 时间:2024/04/20 06:03
概述
信号是一种软件中断,它提供了一种处理异步事件的方法,也是进程间惟一的异步通信方式。目前Linux信号不仅能告诉某一进程发生了什么事,还能给进程传递数据。
信号的来源
硬件方式
- 当用户在终端上按下某些键的时候,将产生信号,如CTRL+C组合键将产生SIGINT信号
- 硬件异常产生信号,如除数为0,无效的存储访问
软件方式
- 在终端下使用kill命令向进程发送任意信号
- 进程调用kill或sigqueue函数发送信号
- 当检测到某种软件条件已经具备时发出信号,由alarm或settimer设置的定时器超时将产生SIGALRM信号
信号的种类
在shell下输入kill-l可显示Linux系统支持的全部信号,如图:
信号的值在signal.h中定义,以上所有信号都有一定的含义,在此不一一陈述。
可靠信号与不可靠信号
在上图中,1号到31号之间的信号都是继承自UNIX系统,是不可靠的信号,33号到64号之间的信号都是可靠信号,也称为实时信号。
信号的可靠性是指信号是否会丢失,或者说该信号是否会排队。
当导致信号产生的事件发生时,内核就产生一个信号。信号产生后,内核通常会在进程表中设置某种形式的标志。当内核设置了这个标识,我们就说内核向一个进程递送了一个信号。信号产生和递送之间的时间间隔,我们称为信号未决。
还有一种判断可靠信号与不可靠信号的方法,我们可以调用sigpending将信号设置为阻塞,如果一个进程产生了一个阻塞的信号,而对该信号的动作是捕捉该信号,则内核将为该进程的此信号保持为未决状态,直到该进程对此信号解除阻塞或将对此信号的响应更改为忽略。如果在进程解除对某个信号的阻塞之前,这个信号发生了多次,那么如果该信号被递送多次则称该信号为可靠信号,只被递送一次的信号被称为不可靠信号。
信号的优先级
如果一个进程有多个未决信号,则对于同一个未决的实时信号,内核按照发送的顺序来递送信号。如果存在多个未决的实时信号,则编号越小的先被递送。如果既存在实时信号,又存在不可靠信号,大部分Linux系统会优先递送不可靠信号。
进程对信号的响应
当信号发生时,用户可以用下列三种方式之一对信号做出响应。
- 捕捉信号。对于要捕捉的信号,可以为其指定信号处理函数,信号发生时该函数自动被调用,在该函数内部实现对该信号的处理
- 忽略信号。大部分信号都可以被忽略,但是SIGKILL和SIGSTOP这两个信号是不能被忽略的,同时这两个信号也不能被捕获和阻塞。此外,如果忽略某些由硬件异常产生的信号(非法访问存储或除以0),则进程的行为是不可预测的
- 按照系统默认的方式进行处理。大部分信号的默认操作是终止进程,所有的实时信号的默认动作都是终止进程。
0 0
- linux信号介绍
- Linux 信号介绍
- Linux信号介绍(转)
- Linux信号介绍
- Linux信号介绍
- linux 信号(signal)介绍
- linux中各种信号介绍
- linux中各种信号介绍
- linux下各种信号介绍
- Linux内核信号处理机制介绍
- Linux内核信号处理机制介绍
- Linux C编程之信号介绍
- Linux内核信号处理机制介绍
- Linux内核信号处理机制介绍
- Linux内核信号处理机制介绍
- Linux内核信号处理机制介绍
- Linux内核信号处理机制介绍
- Linux内核信号处理机制介绍
- CSS3 几步即可实现loading动画效果
- 设计模式
- 二叉树(四)
- 发现大量的TIME_WAIT解决办法
- Trie树和Ternary Search树的学习总结
- Linux信号介绍
- 高仿IOS的Android的弹出框
- Yaf php 栈与memorycache结合
- 如何在ubuntu16.0上安装qq
- 每秒处理10万高并发订单的乐视集团支付系统架构分享
- Remove '@override' annotation解决办法
- IK分词器原理与源码分析
- Python 标准库 —— uuid(生成唯一 ID)
- Thread和Runnable的真正区别