目录
1、信号共性:
简单、不能携带大量信息,满足条件才发送;
2、信号的特质:
信号是软件层面上的“中断”,一旦信号产生,无论程序执行到什么位置,必须立即停止运行,处理结束,再继续执行后续指令。
每个进程收到的所有信号,都是由内核负责发送的,内核处理;
3、信号相关的概念:
产生信号:
1)按键产生
2)系统调用产生
3)软件条件产生
4)硬件异常产生
5)命令产生
概念:
未决:产生与递达之间的状态
递达:产生并且送达到进程。直接被内核处理掉
信号产生方式:执行默认处理动作,忽略、捕捉
阻塞信号集(信号屏蔽字):本质,位图,用来记录信号的屏蔽的状态
未决信号集:本质,位图,用来记录信号的处理状态。该信号集中的信号,表示已经产生,但尚未被处理。
4、信号四要素:
信号使用前,应先确定其4要素,然后再用!!!
信号编号、信号名称、信号对应事件、信号默认处理动作
5、Linux 常用信号一览表:
1)SIGHUP:当用户退出shell时,默认动作为终止进程,相当于直接关闭中断。
2)SIGINT:当用户按下<ctrl+c>时会产生此信号,默认动作为终止进程。
3)SIGQUIT:当用户按下<ctrl+>时产生该信号,默认为终止进程。
4)SIGILL:CPU检测到某进程执行了非法指令,默认动作为终止进程并产生了core文件
7)SIGBUS:非法访问内存地址,默认动作为终止进程
9)SIGKILL:无条件终止进程。默认动作为终止,它向系统管理员提供了可以杀死任何进程的方法。
19)SIGSTOP:停止进程的执行。默认动作为暂定进程。
10)SIGUSR1:用户定义的信号,程序员可以在程序中定义并使用该信号,默认为终止。
12)SIGUSR2:另外一个用户自定义信号,程序员可以在程序中定义并使用该信号,默认为终止。
11)SIGSEGV:指示进程进行了无效内存的访问。默认为终止进程并产生core文件
15)SIGTERM:程序结束信号,与SIGKILL不同的是,该信号可以被阻塞和终止,通常用来表示程序正常退出,执行shell命令kill时,缺省产生这个信号,默认为终止
17)SIGCHLD:子进程状态发生变化时,父进程会收到这个信号,默认为忽略这个信号;
13)SIGPIPE:Broken pipe向一个没有读端的管道写数据,默认终止进程
14)SIGALRM:定时器超时,超时的时间 由系统用alarm设置,默认为终止
6、默认动作:
(1)Term:终止进程
(2)Ign:忽略信号
(3)Core:终止进程,生成Core文件
#include <stdio.h>
#include <string.h>
int main()
{
char *buf;
strcpy(buf,"hello");
return 0;
}
段错误,核心已转储,因为上面 char *buf;出现了野指针,并没有出现定义到内存具体位置。
(4)Stop:停止(暂停)进程
(5)Cont:继续运行进程
7、硬件异常产生信号:
除0操作:8)SIGFPE(浮点数例外) “F”-float 浮点数
非法访问内存 :11)SIGSEGV(段错误)
总线错误 :7)SIGBUS