linux 的信号机制

信号是Linux中非常重要的部分。
信号机制是进程间相互传递消息的一种方法,全称为软中断信号。信号可以看作进程控制的一部分。

基本概念

signal用来通知进程发生了异步事件,进程之间可以互相通过系统调用kill发送软中断信号。但是注意,信号只是用来通知某进程发生了什么事件,并不给该进程传递任何数据。

信号的处理方法:忽略、捕捉和默认动作

忽略信号,大多数信号可以使用这个方式来处理,但是有两种信号不能被忽略(分别是 SIGKILL和SIGSTOP)。因为他们向内核和超级用户提供了进程终止和停止的可靠方法,如果忽略了,那么这个进程就变成了没人能管理的的进程,显然是内核设计者不希望看到的场景。
捕捉信号,需要告诉内核,用户希望如何处理某一种信号,说白了就是写一个信号处理函数,然后将这个函数告诉内核。当该信号产生时,由内核来调用用户自定义的函数,以此来实现某种信号的处理。
系统默认动作,对于每个信号来说,系统都对应由默认的处理动作,当发生了该信号,系统会自动执行。不过,对系统来说,大部分的处理方式都比较粗暴,就是直接杀死该进程。

linux支持的信号列表:

用命令kill -l可以查看linux下的所有信号:
在这里插入图片描述
SIGHUP:1号信号,Hangup detected on controlling terminal or death of controlling process(在控制终端上挂起信号,或让进程结束)

SIGINT:2号信号,Interrupt from keyboard(键盘输入中断,ctrl + c )

SIGQUIT:3号信号,Quit from keyboard(键盘输入退出,ctrl+ | )

SIGABRT:6号信号,Abort signal from abort(3)(非正常终止,double free)

SIGKILL:9号信号,Kill signal(杀死进程信号,linux规定进程不可以忽略这个信号)

综上所述,kill -9中,9代表的就是9号信号,带有强制执行的意思,它告诉进程:“无论你现在在做什么,立刻停止”。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐