kill -l 可以查看当前所有的信号量
编号为1 ~ 31的信号为传统UNIX支持的信号,是不可靠信号(非实时的),编号为32 ~ 63的信号是后来扩充的,称做可靠信号(实时信号)。
不可靠信号和可靠信号的区别在于前者不支持排队,可能会造成信号丢失,而后者不会。
注意:
- kill -KILL 15366 、kill -SIGKILL 15366 、kill -9 15366三者等价
- 登录Linux时,系统会分配给登录用户一个终端(Session)。在这个终端运行的所有程序,包括前台进程组和后台进程组,一般都属于这个 Session。当用户退出linux登录时,前台进程组和后台有对终端输出的进程将会收到SIGHUP信号。这个信号的默认操作为终止进程,因此前台进程组和后台有终端输出的进程就会中止。不过可以捕获这个信号,比如wget能捕获SIGHUP信号,并忽略它,这样就算退出了Linux登录,wget也能继续下载。
- HUP信号量如果是发送给后台开启的进程,则是加载配置文件,例如nginx、httpd...这些服务经常会用到这个信号量
- kill -15 和kill -9的区别是SIGNKILL(9) 的效果是立即杀死进程. 该信号不能被阻塞, 处理和忽略。
- SIGNTERM(15) 的效果是正常退出进程,退出前可以被阻塞或回调处理。并且它是Linux缺省的程序中断信号。
- Ctrl+C组合键会生成SIGINT信号,并将其发送给当前在shell中运行的所有进程。
- Ctrl+Z组合键会生成一个SIGTSTP信号,停止shell中运行的任何进程。停止(stopping)进程跟终止(terminating)进程不同:停止进程会让程序继续保留在内存中,并能从上次停止的位置继续运行
- bash shell会忽略收到的任何SIGQUIT (3)和SIGTERM (15)信号(正因为这样,交互式shell才不会被意外终止), killall bash 不会杀死自身bash的原因就是这个.
在进程虚拟地址空间中,并非所有的地址范围都需要页表条目。通常情况下,由于可能存在大段的虚拟地址空间并未投入使用,故而也无必要为其维护相应的页表条目。若进程试图访问的地址并无页表条目与之对应,那么进程将收到一个 SIGSEGV(11) 信号。