信号概念

  • 信号共性:1. 简单 2. 不能携带大量信息 3. 满足某个特设条件才发送。
  • 程序不管执行到什么位置,都有暂停运行,去处理信号,处理完继续执行。与时钟中断类似(硬件中断),信号是软件层面上的中断(软中断)。
  • 每个进程收到的信号,都是由内核负责发送,内核处理的。
    linux系统编程-信号的基础知识


与信号相关的事件和状态

  • 产生信号的5种方法:
  1. 按键产生:Ctrl+c (终止一个进程,内核向进程发送信号,杀死了进程)
  2. 系统调用:kill 、abort、raise
  3. 软件条件产生:如定时器(alarm)
  4. 硬件异常产生:非法访问内存(段错误),除以0(浮点数异常),内存对齐出错(总线错误)
  5. 命令产生:kill -l

  • 处理信号的3种方式:
  1. 执行默认动作
  2. 忽略(丢弃)
  3. 捕捉(调用户处理函数)

  • 未决信号集、阻塞(屏蔽)信号集:

阻塞信号集(信号屏蔽字):

  1. 将某些信号加入集合,对他们设置屏蔽,当屏蔽x信号后,再收到该信号,该信号的处理将推后(解除屏蔽后)

未决信号集:

  1. 信号产生,未决信号集中描述该信号的位立刻翻转为1,表信号处于未决状态。当信号被处理对应位翻转回为0。这一时刻往往非常短暂。
  2. 信号产生后由于某些原因(主要是阻塞)不能抵达。这类信号的集合称之为未决信号集。在屏蔽解除前,信号一直处于未决状态。

linux内核包含进程控制块(PCB结构体),除了包含进程ID、状态、工作目录、文件描述符表、用户ID、组ID等;还包含信号相关信息(主要是 未决信号集、阻塞信号集)。

linux系统编程-信号的基础知识

信号的编号

  • 可以使用kill –l命令查看当前系统可使用的信号有哪些。
1) SIGHUP	2) SIGINT	  3) SIGQUIT	     4) SIGILL	 	    5) SIGTRAP
6) SIGABRT	 7) SIGBUS	   8) SIGFPE	     9) SIGKILL	          10) SIGUSR1
11) SIGSEGV	12) SIGUSR2  	  13) SIGPIPE	     14) SIGALRM	    15) SIGTERM
16) SIGSTKFLT	17) SIGCHLD	    18) SIGCONT	     19) SIGSTOP	    20) SIGTSTP
21) SIGTTIN     22) SIGTTOU	    23) SIGURG	     24) SIGXCPU	    25) SIGXFSZ
26) SIGVTALRM	 27) SIGPROF	    28) SIGWINCH	 29) SIGIO	     30) SIGPWR
31) SIGSYS	 34) SIGRTMIN	    35) SIGRTMIN+1	 36) SIGRTMIN+2	    37) SIGRTMIN+3
38) SIGRTMIN+4	 39) SIGRTMIN+5	    40) SIGRTMIN+6	 41) SIGRTMIN+7	    42) SIGRTMIN+8
43) SIGRTMIN+9	 44) SIGRTMIN+10   45) SIGRTMIN+11	 46) SIGRTMIN+12    47) SIGRTMIN+13
48) SIGRTMIN+14	 49) SIGRTMIN+15   50) SIGRTMAX-14	 51) SIGRTMAX-13    52) SIGRTMAX-12
53) SIGRTMAX-11	 54) SIGRTMAX-10   55) SIGRTMAX-9	 56) SIGRTMAX-8	    57) SIGRTMAX-7
58) SIGRTMAX-6	 59) SIGRTMAX-5	    60) SIGRTMAX-4	 61) SIGRTMAX-3	    62) SIGRTMAX-2
63) SIGRTMAX-1	 64) SIGRTMAX

不存在编号为0的信号。其中1-31号信号称之为常规信号(也叫普通信号或标准信号),34-64称之为实时信号,驱动编程与硬件相关。名字上区别不大。而前32个名字各不相同。

相关文章: