Linux信号介绍

原文链接:http://blog.csdn.net/lyh__521/article/details/49646927


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


信号来源

  1. 硬件方式
    • 用户在终端按下某些键。如 Ctrl+C
    • 硬件异常。如:除数为0、无效的存储访问等。这些事件由CPU检测到,然后通知给内核,由内核生成相应的信号,并把信号发送给正在运行的程序。
  2. 软件方式
    • 用户在终端调用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标准的操作系统将优先递送不可靠信号。

进程对信号的响应
  1. 捕捉信号。指定信号处理函数。
  2. 忽略信号。
  3. 按照系统默认方式处理。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值