向进程发送信号

我们可以使用 kill PID 杀死一个进程,或者使用 kill -9 PID 强制杀死一个进程。

记得以前在研究生的时候师弟和师妹经常问我,kill -9 里面的 -9 是什么意思,我告诉他们,这是强制杀死进程的意思,让这个进程“九死一生”。当然这是开玩笑,这里的 -9 是信号的一种,kill 命令会向进程发送一个信号,-9代表 SIGKILL 之意,用于强制终止某个进程,当然这是一种无情地,野蛮地方式干掉进程。

我们可以通过 kill -l 命令查看到所有的信号

HUP INT QUIT ILL TRAP ABRT BUS FPE KILL USR1 SEGV USR2 PIPE ALRM TERM STKFLT CHLD CONT STOP TSTP TTIN TTOU URG XCPU XFSZ VTALRM PROF WINCH POLL PWR SYS

 

上面的信号是有顺序的,比如第1个是 HUP,第9个是 KILL,下面两种方式是等价的:

kill -1 PID 和 kill -HUP PID

kill -9 PID 和 kill -KILL PID

信号HUP通常程序用这个信号进行优雅重载配置文件,重新启动并且不影响正在运行的服务。比如

pkill -1 uwsgi 优雅重启uwsgi 进程,对服务器没有影响

kill -1 NGINX_PID 优雅重启nginx进程,对服务器没有影响

除了知道可以这么使用之外,感兴趣的读者还可以自行学习,深入了解下uwsgi和nginx无损reload的机制。

我们常用CTRL+C中断一个命令的执行,其实就是发送了一个信号到该进程

CTRL-C 发送 SIGINT 信号给前台进程组中的所有进程,常用于终止正在运行的程序。

CTRL-Z 发送 SIGTSTP 信号给前台进程组中的所有进程,常用于挂起一个进程。

每个程序可能对部分信号的功能定义不一致,其它信号的含义大家可以自行学习。

上一篇:linux中kill -HUP pid命令是干什么的?


下一篇:python基础—day3 运算符