Linux kill command

作用

kill 命令是用来向进程发送一个用户指定的信号,对进程进行相应的操作。

kill 命令的执行原理是向操作系统内核发送一个信号(多是终止信号)和目标进程的 PID,系统内核根据收到的信号类型,对指定进程进行相应的操作。

进程PID可用ps、pidof、pstree、top等工具获取,然后使用kill命令来结束该进程。

用法

命令格式

1
2
3
4
5
6
kill [options] <pid> [...]

options :
-<signal> : 指定发送给进程的信号,指定信号的名称或号码都可以。
-l : 列出所有信号的名称和号码。
<pid> […] : 把信号发送给列出的所有进程。

命令参数

1
2
3
4
5
6
-l	参数为信号名称,显示该信号的数字。如果不加信号参数,显示全部信号名称
-p 指定kill 命令只打印相关进程的进程号,而不发送任何信号
-s 指定发送信号
-u 指定用户
-signal_name 指定进程发送信号名称
-signal_number 指定进程发送信号数字

使用实例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[root@hadoop-centos-01 ~]# 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

[root@hadoop-centos-01 ~]# kill -l SIGRTMIN+12
46
代号 名称 内容
1 SIGHUP 启动被终止的程序,可让该进程重新读取自己的配置文件,类似重新启动。
2 SIGINT 相当于用键盘输入 [ctrl]-c 来中断一个程序的进行。
9 SIGKILL 代表强制中断一个程序的进行,如果该程序进行到一半,那么尚未完成的部分可能会有“半产品”产生,类似 vim会有 .filename.swp 保留下来。
15 SIGTERM 以正常的方式来终止该程序。由于是正常的终止,所以后续的动作会将他完成。不过,如果该程序已经发生问题,就是无法使用正常的方法终止时,输入这个 signal 也是没有用的。
19 SIGSTOP 相当于用键盘输入 [ctrl]-z 来暂停一个程序的进行。
1
2
[root@hadoop-centos-01 ~]# kill -15 pid
# 这条命令发信号让进程正常退出。所谓的正常退出是指按应用程序自己的退出流程完成退出,这样就可以清理并释放资源。
1
2
[root@hadoop-centos-01 ~]# kill -9 pid
# 强制结束进程,这样结束掉的进程不会进行资源的清理工作。
1
2
[root@hadoop-centos-01 ~]# kill -19 pid
# 暂停进程
1
2
3
4
# 杀死指定用户所有进程
[root@hadoop-centos-01 ~]# kill -9 $(ps -ef | grep username)
# 或
[root@hadoop-centos-01 ~]# kill -u username

总结

kill命令可以带信号选项,也可以不带信号。如果没有信号号码,kill命令就会发出终止信号(15),该信号可以被进程捕获,使进程在退出之前可以清理并释放资源。也可以向进程发送发送指定信号;

可以向多个进程发信号或终止它们,当kill成功地发送了信号后,shell会在屏幕上显示出进程的终止信息;

应注意,信号使进程强行终止,这常会带来一些副作用,如数据丢失或者终端无法恢复到正常状态。发送信号时必须小心,只有在万不得已时,才用kill信号(9),因为进程不能首先捕获它。要撤销所有的后台作业,可以输入kill 0。因为有些在后台运行的命令会启动多个进程,跟踪并找到所有要杀掉的进程的PID是件很麻烦的事。这时,使用kill 0来终止所有由当前shell启动的进程,是个有效的方法;

kill 命令并不能100%终止进程,kill 命令只是“发送”一个信号,故只有当信号被程序成功“捕获”,系统才会执行 kill 命令指定的操作;反之,如果信号被“封锁”或者“忽略”,则 kill 命令将会失效。

-------------本文结束感谢您的阅读-------------