我們可以使用 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 信號給前台進程組中的所有進程,常用於掛起一個進程。
每個程序可能對部分信號的功能定義不一致,其它信號的含義大家可以自行學習。
