Linux結束進程到底有多少種方法?

1. 前言

我們經常在Linux裡使用kill命令來結束某後臺進程。但kill命令實際上是向進程發送信號,並且有多種信號。終止運行一個程序只是其中一個信號而已。kill是根據進程號發送信號的,而另一個工具killall是根據進程名稱發送信號的。

2. 查看kill支持的信號

[root@zcwyou ~]# kill -l

1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP

6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1

11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM

16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP

21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ

26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR

31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3

38) SIGRTMIN+4 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8

43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13

48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12

53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7

58) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2

63) SIGRTMAX-1 64) SIGRTMAX

Linux結束進程到底有多少種方法?

linux查看kill選項

3. 結束進程

普通用戶只能使用不帶signal參數的kill命令

一般情況下,最多使用-9信號。即強制結束某個進程。

比如強制結束進程號為123的進程。

先確認進程號:

[root@zcwyou ~]# top
Linux結束進程到底有多少種方法?

linux查看進程號

然後根據進程號強制結束:

[root@zcwyou ~]# kill -9 123

默認情況,kill使用信號15結束進程,並且是安全的。而信號 9 則是處理異常進程的,請勿濫用

4. kill其它常用信號

代號名稱內容1SIGHUP啟動被終止的程序,可讓該進程重新讀取自己的配置文件,類似重新啟動。2SIGINT相當於用鍵盤輸入 [ctrl]-c 來中斷一個程序的進行。9SIGKILL代表強制中斷一個程序的進行,如果該程序進行到一半,那麼尚未完成的部分可能會有“半產品”產生,類似 vim會有 .filename.swp 保留下來。15SIGTERM以正常的方式來終止該程序。由於是正常的終止,所以後續的動作會將他完成。不過,如果該程序已經發生問題,就是無法使用正常的方法終止時,輸入這個 signal 也是沒有用的。19SIGSTOP相當於用鍵盤輸入 [ctrl]-z 來暫停一個程序的進行。

5. 殺死用戶user1的所有進程

[root@zcwyou ~]# kill -9 $(ps -ef | grep user1)

或者

[root@zcwyou ~]# kill -u user1

6. 另一個工具killall命令,根據進程名稱發送信號,而不是進程號

以CentOS7.5為例,默認情況並沒有安裝killall命令。

運行以下命令安裝軟件:

[root@zcwyou ~]# yum -y install psmisc
Linux結束進程到底有多少種方法?

linux安裝killall命令

先查看正在運行的進程

[root@zcwyou ~]# ps -ef 

結束一個名為abc的進程,默認情況下使用SIGTERM命令。

[root@zcwyou ~]# killall abc

查看killall支持的信號

[root@zcwyou ~]# killall -l

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

Linux結束進程到底有多少種方法?

linux結束進程命令killall支持的信號

注意:假如進程的名字的長度小於等於15,默認情況下就會以完整名稱匹配。

7. 還有一個pkill命令,也是根據進程名稱發送信號,類似於killall

pkill選項

-o:僅向找到的最小(起始)進程號發送信號;

-n:僅向找到的最大(結束)進程號發送信號;

-P:指定父進程號發送信號;

-g:指定進程組;

-t:指定開啟進程的終端。

例子:

結束進程abc

pkill abc

以CentOS7.5為例,默認情況下,系統並沒有集成pkill命令。而是要自行安裝。

[root@zcwyou ~]# yum -y install procps-ng
Linux結束進程到底有多少種方法?

Linux安裝pkill工具結束進程

8. 總結

Linux下結束進程的工具有很多,這裡僅僅瞭解一些常用的命令。

本文已同步至博客站:

https://www.linuxrumen.com/cyml/400.html

點擊瞭解更多,快速查看更多的技術文章列表。


分享到:


相關文章: