Linux信号小细节整理
1、程序在运行抛出异常的时候,会产生信号,是操作系统监测到了异常的发生,给程序发送信号,让其退出
2、最常用的ctrl+c所发送的是二号信号,SIGINT
3、使用raise函数可以发送任意信号,但是允许程序采取忽略处理;而abort函数其他也是一样,但是不允许程序忽略处理
4、忽略和阻塞的区别:忽略是指进程进入未决信号集之后,系统对其采取不进行相应操作即不调用相应函数,而阻塞是指不允许这个信号被递达,但是其可以进入未决状态,但是未决状态是否能进入递达取决于pending表和block表的位运算结果。一个信号要先进入未决,再被递达,进行处理
5、alarm函数是一个计时器,在你给定秒数之后向调用他的进程发送终止信号
6、使用ctrl+c是让当前的前台进程退出(同一时间内操作系统只允许有一个前台进程),而ctrl+z是让当前的前台进程暂停,没有将其杀死。
7、未决信号是信号已经被接受,但是还没有被处理的信号
8、关于同一个信号是否可以在未决信号表中添加多次的问题:如果是非可靠信号的话,如果已经在未决信号中存在,那么将不再允许其他的同信号被接收;但如果是可靠信号的话,会将多次发送的同一信号放在一个sigqueue中,当一个处理完以后,检测是否还有未经处理的同种信号,如果没有,就将相应的pending表置为0
9、若信号被阻塞,则其仍然可以被添加进未决信号集合之中,但是不对信号做递达处理(类似于umask)
10、当一个进程是停止状态或者是僵尸状态时,其无法被杀死
11、SIGSTOP、SIGKILL是无法被自定义,无法被杀死的