1.信号基本概念
信号的基本概念工
信号是进程之间常用的通信手段, 信号:通知(事情通知),用来通知某个进程发生某个事情, 信号是突发事件,是异步发生的,也被称为“软件中断”。
2.信号如何产生
- 某个进程发送给另外一个进程或者发送给自己
- 由内核(操作系统)发送给某个进程
- 通过在键盘输入命令ctrl+c(中断信号),kill命令
- 内存访问异常,除数为0等,硬件都会检测到并且通知内核
查找某个信号命令:
sudo find / -name "signal.h" | xargs grep -in "SIGHUPY"
3.kill命令
kill 能给进程发送多种信号
详细查看进程命令:
ps-eo pid,ppid,sid,tty,pgrp,comm|grep-E'bash|PID|nginx
跟踪信号命令(显示进程收到的信号):
sudo strace -e trace=signal -p 1184
用kill 跟 进程id,向进程发送SIGTERM信号(终止信号)
kill -数字 进程id,发出跟这个数字对应的信号 例如 kill -1 1247发送SIGHUP信号给1247进程
4.进程的状态
查看进程状态命令:
ps -eo pid,ppid,sid,tty,pgrp,comm,stat | grep-E 'bash|PID|nginx'
(更详细):
ps aux | grep -E 'bash|PID]nginx'
aux是BSD风格显示格式
状态参数含义表:
SIGKILL(-9):
不能被忽略,这是杀死任意进程的可靠方法,不能被进程本身捕捉
SIGSTOP(-19):
不能被忽略,使进程停止运行,可以用SIGCONT继续运行,但进程被放入到了后台
5.信号处理的相关动作
当信号出现时,我们可以按以下三种方式之一进行处理:
- 执行系统默认动作,绝大多数信号的默认动作是杀死你这个进程;
- 调用系统函数忽略此信号(不包括SIGKILL和SIGSTOP)
- 编写处理函数来处理,代替缺省动作(不包括SIGKILL和SIGSTOP)