linux---信号SIGINT(进程&线程通信)

信号实现进程、线程间的(异步)通信

https://blog.csdn.net/zb1593496558/article/details/80280346

信号是内容受限(本质是一个int型编号)的异步通信机制(属于软件中断)

软中断信号(signal,又简称为信号)用来通知进程发生了异步事件。在软件层次上是对中断机制的一种模拟,在原理上,一个进程收到一个信号与处理器收到一个中断请求可以说是一样的。

信号是进程间通信机制中唯一的异步通信机制

一个进程不知道信号何时到达,也不必通过任何操作来等待信号的到达。
信号机制除了基本通知功能外,还可以传递附加信息。

信号产生:

(1)硬件来源(键盘事件 or 硬件故障/异常)
(2)软件来源,最常用发送信号的系统函数是kill, raise, alarm和setitimer以及sigqueue函数
(3)非法内存 如果内存管理出错,系统就会发送一个信号进行处理
(4)环境切换 比如说从用户态切换到其他态,状态的改变也会发送一个信号,这个信号会告知给系统

信号分类

信号可靠性分类

1、不可靠信号(不排队,可能会信号丢失):1-32
  Linux信号机制基本上是从Unix系统中继承过来的。早期Unix系统中的信号机制比较简单和原始,信号值小于SIGRTMIN的信号都是不可靠信号。这就是"不可靠信号"的来源。它的主要问题是信号可能丢失。
2、可靠信号(会排队):SIGRTMIN-SIGRTMAX(34-64)
  随着时间的发展,实践证明了有必要对信号的原始机制加以改进和扩充。由于原来定义的信号已有许多应用,不好再做改动,最终只好又新增加了一些信号,并在一开始就把它们定义为可靠信号,这些信号支持排队,不会丢失。

Linux在支持新版本的信号安装函数sigation()以及信号发送函数sigqueue()的同时,仍然支持早期的signal()信号安装函数,支持信号发送函数kill()

# 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

信号实时性分类:

1、实时信号(即不可靠信号)
  早期Unix系统只定义了32种信号,前32种信号已经有了预定义值,每个信号有了确定的用途及含义,并且每种信号都有各自的缺省动作。如按键盘的CTRL ^C时,会产生SIGINT信号,对该信号的默认反应就是进程终止。
2、非实时信号(即可靠信号)
  后32个信号表示实时信号,等同于前面阐述的可靠信号。这保证了发送的多个实时信号都被接收。

常见信号介绍(信号的名字 )

 信号宏                    		num                                         信号对应的作用
(1)SIGINT              			2                  Ctrl+Ch或者DELETE时OS送给【前台】进程组中【每个】进程
(2)SIGABRT                      6                                            调用abort函数,进程异常终止
(3)SIGPOLL  / SIGIO         	8                                   指示一个异步IO事件,在高级IO中提及
(4)SIGKILL                      9                                杀死进程的终极办法
(5)SIGSEGV                      11                                            无效存储访问时OS发出该信号
(6

你可能感兴趣的:(linux,朱有鹏)