您的位置:首页 > 运维架构 > Linux

Linux信号介绍

2015-11-04 23:22 288 查看
原文链接:http://blog.csdn.net/lyh__521/article/details/49646927

   信号(signal)是一种软件中断,它提供了一种处理异步事件的方法,也是进程间唯一的异步通信方式

信号来源

硬件方式

用户在终端按下某些键。如 Ctrl+C

硬件异常。如:除数为0、无效的存储访问等。这些事件由CPU检测到,然后通知给内核,由内核生成相应的信号,并把信号发送给正在运行的程序。

软件方式

用户在终端调用kill命令。

进程调用kill或sigqueue函数发送信号。

当检测到某种软件条件已经具备时发送信号。如设置的定时器超时。

信号种类

执行kill -l 命令可显示Linux系统所支持的全部信号



信号的值在signal.h 中定义,以下时部分信号的含义,具体可查询《UNIX环境高级编程》

注:默认动作是,当用户没有专门为该信号定义相应的处理函数时,进程收到该信号默认产生的行为。

(1) SIGINT : 用户按下了Ctrl+C 组合键。默认为终止进程。

(2) SIGILL:CPU检测到某进程执行了非法指令。默认终止进程并产生core文件。

(3) SIGABRT:调用abort函数时产生的信号。默认终止进程并产生core文件。

(4) SIGBUS:非法访问内存地址,包括内存地址对齐出错,默认终止进程并产生core文件。

(5) SIGFPE:发生致命的算术运算错误,如浮点运算错误,溢出以及除数为0等。默认终止进程并产生core文件。

(6) SIGKILL:无条件终止进程。本信号不能被忽略、处理和阻塞。使用他可以杀死任何进程。默认终止进程

(7) SIGSEGV:进程进行了无效的内存访问。默认动作为终止进程并产生core文件。

(8) SIGALRM:定时器超时,由系统调用alarm设置。默认终止进程。

(9) SIGTERM:程序结束信号,与SIGKILL不同的是,该信号可以被阻塞和处理。通常用来要求程序正常退出。执行kill命令缺省产生该信号。默认终止进程。

(10) SIGCHLD:子进程结束时,父进程会收到这个信号。默认忽略该信号。

(11) SIGCONT:让一个暂停的进程继续执行。

(12) SIGSTOP:停止进程的执行。注意他和SIGTERM以及SIGINT的区别:该进程还未结束,只是暂停执行。本信号不能为忽略、处理和阻塞。默认暂停进程。

(13) SIGTSTP:停止进程的运行,但该信号可以被处理和忽略。按下Ctrl+Z时发出。默认暂停进程。

(14) SIGURG:套接字上有紧急数据时,向当前正在运行的进程发出此信号,报告有紧急数据到达。默认忽略该信号。

(15) SIGXCPU:进程执行时间超过了分配给该进程的CPU时间。默认动作为终止进程。

(16) SIGIO:此信号向进程指示发生了一个异步IO事件。默认忽略。

(17) SIGPWR:关机。默认终止进程。

(18) SIGUSR1和SIGUSR2 是用户自定义信号。默认为终止进程。

(00) SIGHUP 至 SIGSYS 的信号都是继承自UNIX系统,是不可靠信号。SIGRTMIN至SIGRTMAX之间的信号,他们都是可靠信号,也称为实时信号

可靠信号与不可靠信号

信号的可靠性是指信号是否会丢失,或者说信号是否支持排队。



   进程可以将信号设置为阻塞,如果进程产生了一个阻塞的信号,并且不希望忽略该信号,则内核会将该信号保持为未决状态,直到该进程对该信号解除阻塞或更改为忽略。在这之间,如果信号发生了多次,那么如果信号被递送多次,则称之为可靠信号;只被递送一次的信号称为不可靠信号

信号的优先级

   信号实质上是软中断,中断有优先级,信号也有优先级。如果一个进程有多个未决信号,则对于同一个未决的实时信号,内核将按照发送的顺序来递送信号。如果存在多个未决的实时信号,则值(或者说说编号)越小的越先被递送。如果既存在不可靠信号,又存在可靠信号(实时信号),大多数遵循POSIX标准的操作系统将优先递送不可靠信号。

进程对信号的响应

捕捉信号。指定信号处理函数。

忽略信号。

按照系统默认方式处理。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息