首页 > 编程笔记

Linux kill命令:终止进程

在 Linux 系统中,通常使用信号(signal)来控制进程。一个信号就代表着一个消息可以传送给一个进程,而进程通过执行信号所要求的操作来响应信号。

信号是由一个信号号码和一个信号名来标识,每一个信号都有一个相关的操作。常用的信号描述如表 1 所示。

表 1 常用信号的描述
信号号码 信号名 事 件 描 述 默认响应
1 SIGHUP 挂起 Hang up 挂掉电话线或终端连接的挂起信号,这个信号 也会造成某些进程在没有终止的情况下重新 初始化 退出 Exit
2 SIGINT 中断 Interrupt 使用键盘产生的一个中断信号(Ctrl+C 快捷键) 退出 Exit
9 SIGKILL 杀死 Kill 杀死一个进程的信号,一个进程不能忽略这个 信号 退出 Exit
15 SIGTERM 终止 Terminate 以一种有序的方式终止一个进程。有些进程会 忽略这个信号。Kill 命令默认发送这个信号  

Linux 系统提供了可以用于直接终止进程的命令,分别是 kill 和 killall 命令。本节先讲解 kill 命令,killall 命令会在《Linux killall命令》一节中介绍。

kill 从表面上来讲,就是用来杀死进程的命令;从本质上讲,kill 命令只是用来向进程发送一个信号,信号具体是什么操作是由用户指定的。kill 命令会向操作系统内核发送一个信号(一般都是终止信号)和目标进程的 PID,然后系统内核根据收到的信号类型,对指定进程进行相应的操作。

使用 kill 命令把一个信号发送给一个或多个进程。kill 命令只能终止一个用户所属的一些进程,但 root 用户可以使用 kill 命令终止任何进程。kill 命令默认是向进程发送 signal15,这个信号将引起进程以一种有序的方式正常终止。

kill 命令的基本语法格式如下:

[root@bogon ~]# kill [信号或参数] PID

注意,kill 命令是按照 PID 来确定进程的,所以 kill 命令只能识别 PID,而不能识别进程名。在使用 kill 命令终止一个进程之前,必须知道该进程的 PID,可以通过在一个命令行上输入多个 PIDs 的方法,一次终止多个进程。

在Linux系统中定义了好多种不同类型的信号,可以通过使用 kill -l 命令查看所有信号及其信号号码。kill 命令常用的信号参数及描述如表 2 所示。

表 2 kill命令常用的信号参数及作用
参 数 作 用
-l 信号,如果不加信号的编号参数,则使用“-l”参数会列出全部的信号名称
-a 当处理当前进程时,不限制命令名和进程号的对应关系
-p 指定 kill 命令只打印相关进程的进程号,而不发送任何信号
-s 指定发送信号
-u 指定用户

【例 1】列出 kill 命令可以发送给系统的所有信号的信号号码和信号名称。在终端页面输入如下命令:

[root@bogon ~]# 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


【例 2】使用 kill 命令得到指定数值。在终端页面输入如下命令:

[root@bogon ~]# kill -l KILL
9
[root@bogon ~]# kill -l SIGKILL
9
[root@bogon ~]# kill -l SIGTERM
15
[root@bogon ~]# kill -l SIGHUP
1


【例 3】先用 ps 命令查找进程,然后用 kill 命令杀掉进程。
1) 首先需要使用 ps 的组合命令分页显示系统中所有进程的状态信息。在终端页面输入如下命令:

[root@bogon ~]# ps -ef | more


2) 不退出此时的 more 命令,再开启一个终端页面,切换到 root 用户,使用 pgrep 命令来确定 more 命令的进程 PID。输入命令如下:

[root@bogon ~]# pgrep -l more
10305   more


3) 使用 kill 命令以一种有序的方式终止 PID 为 10305 的进程,接着使用 pgrep 命令来测试 kill 命令是否执行成功,输入命令如下:

[root@bogon ~]# kill 10305
[root@bogon ~]# pgrep -l more


4) 执行完 pgrep 命令系统也不会有任何消息提示,切换到执行 ps 命令的终端窗口,可以看到“-More-已终止”的提示信息,表明 more 命令所对应的进程 10305 已经被终止了。

优秀文章