我们经常在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查看kill选项
3. 结束进程
普通用户只能使用不带signal参数的kill命令
一般情况下,最多使用-9信号。即强制结束某个进程。
比如强制结束进程号为123的进程。
先确认进程号:
[root@zcwyou ~]# top
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安装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结束进程命令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安装pkill工具结束进程
8. 总结
Linux下结束进程的工具有很多,这里仅仅了解一些常用的命令。