Linux常用信号解析

111 阅读2分钟

说明

我们经常使用kill命令杀死进程,其实默认kill命令是向进程发送了一个SIGTERM信号让进程优雅地退出的,那么其他常用Linux中的信号有哪些呢,具体解析如下

常用信号

信号名信号含义
SIGHUP(连接断开)是终端断开信号,如果终端接口检测到一个连接断开,发送此信号到该终端所在的会话首进程,缺省动作会导致所有相关进程退出,kill -1 进程号 也能发送此信号给进程
SIGALAM(定时器超时)一般调用系统函数alarm创建定时器 ,定时器超时了就会有这个信号
SIGINT(中断)从键盘上输入ctrl + c(中断键), 比如你进程正跑着循环干一个事,这一ctrl + c 就能打断你干的事,终止进程;但是shell会将后台进程对该信号的处理设置为忽略(也就是说该进程若在后台运行则不会收到该信号)
SIGSEGV(无效内存)内存访问异常,除数为0等,硬件会检测到并通知内核;其实这个SEGV代表段违例(segmentation violation),你有的时候运行一个你编译出来的可执行的c程序,如果内存有问题,执行的时候会出现这个提示
SIGIO(异步IO)通用异步I/O信号,如果通讯套接口上有数据到达,或发生一些异步错误,内核就会通知我们这个信号
SIGCHLD(子进程改变)一个进程终止或者停止时,这个信号会被发送给父进程(我们想象下nginx,worker进程终止时,master进程应该会收到内核发出的针对该信号的通知)
SIGUSR1,SIGUSR2(都是用户定义信号)用户定义的信号,可用于应用程序
SIGTERM(终止)一般你通过在命令行上输入kill命令来杀死一个进程的时候就会触发这个信号,收到这个信号后,你有机会进行一些退出前的处理,实现所谓的优雅退出的效果
SIGKILL(终止)不能被忽略,这是杀死任意进程的可靠方法,不能被进程本身捕捉
SIGSTOP (停止)不能被忽略,使进程停止运行,可以使用SIGCONT继续运行,但进程会被放入后台
SIGQUIT(终端退出符)从键盘按ctrl + \ , 但shell会将后台进程对该信号的处理设置为忽略(也就是说该进程若在后台运行则不会收到该信号)
SIGCONT(使暂停进程继续)使暂停的进程继续运行
SIGTSTP (终端停止符)从键盘按ctrl + z ,进程被停止,并被放入后台,可以用SIGCONT继续运行