一、kill 命令
Linux 中的 kill 命令用来终止指定的进程的运行,是 Linux 下进程管理的常用命令。通常,终止一个前台进程可以使用Ctrl+C
键,但是,对于一个后台进程就须用 kill 命令来终止,那就需要先使用 ps、pidof、pstree、top等工具获取进程 PID,然后使用 kill 命令来杀掉该进程。kill 命令是按照 PID 来确定进程的,所以 kill 命令只能识别 PID,而不能识别进程名。其基本语法命令如下:
kill [参数] [进程id]
kill 命令是通过向进程发送指定的信号来结束相应进程的,根据不同的信号,kill 命令可以完成不同的操作。在默认情况下,采用编号为15的TERM信号,TERM信号将终止所有不能捕获该信号的进程。对于那些可以捕获该信号的进程就要用编号为9的 kill 信号,强行“杀掉”该进程。
Linux 中每个进程的进程的PID是唯一的,可以用于区分不同的进程。kill 命令是按照 PID 来确定进程的,所以 kill 命令只能识别 PID,而不能识别进程名。我们举几个例子来说明一下 kill 命令:
# 查询java服务的PID$ pidof java118754# 将PID所代表的进程终止掉$ kill 118754# 有时系统会提示进程无法被终止,此时可以加参数-9,表示最高级别地强制杀死进程$ kill -9 118754
注意:
kill可以带有进程ID号作为参数。当用kill向这些进程发送信号时,必须是这些进程的主人。如果试图撤销一个没有权限撤销的进程或撤销一个不存在的进程,就会得到一个错误信息。当kill成功地发送了信号后,shell会在屏幕上显示出进程的终止信息。有时这个信息不会马上显示,只有当按下Enter键使shell的命令提示符再次出现时,才会显示出来。应注意,信号使进程强行终止,这常会带来一些副作用,如数据丢失或者终端无法恢复到正常状态。发送信号时必须小心,只有在万不得已时,才用kill信号(9),因为进程不能首先捕获它。要撤销所有的后台作业,可以输入kill 0。因为有些在后台运行的命令会启动多个进程,跟踪并找到所有要杀掉的进程的PID是件很麻烦的事。这时,使用kill 0来终止所有由当前shell启动的进程,是个有效的方法。
二、killall 命令
Linux 系统中的 killall 命令用于杀死指定名字的进程,但和 kill 不同的是,killall 命令不再依靠 PID 来杀死单个进程,而是通过程序的进程名来杀死对应的进程。我们可以使用 kill 命令杀死指定进程 PID 的进程,如果要找到需要杀死的进程,还需要在之前使用 ps 等命令,再配合 grep 来查找进程,而 killall 把这两个过程合二为一,是一个很好用的命令。其基本语法命令如下:
killall [参数] [进程名]
# 杀死所有同名进程killall nginx# 强制杀死所有bash进程killall -9 bash# 向进程发送指定信号killall -TERM ngixn# 向进程发送指定KILL信号killall -KILL nginx
默认没有需要yum安装
yum -y install psmisc
三、pkill 命令
pkill 命令和 killall 命令的用法相同,都是通过进程名杀死进程。与 kill 不同的是它会杀死指定名字的所有进程,类似于 killall 命令。kill 命令杀死指定进程 PID,需要配合 ps 使用,而 pkill 直接对进程对名字进行操作,更加方便。
pkill [选项] 进程名称
# 结束 mysql 进程pkill mysql# 结束mark,danny用户的所有进程pkill -u mark,danny# 使用w命令查询本机已经登录的用户w# 强制杀死 mysql 进程pkill -9 -t mysql
四、拓展命令
如果能看懂下面一系列命令,那么killall 、kill 、pkill三个命令之间的区别你也就了然于胸了。
pgrep命令:专门显示进程的进程号,相当于:
ps -aux | grep 进程名 | grep -v grep| awk '{print $2}'
pidof命令:pid of xx进程,显示进程的进程号,同上pgrep。
组合命令的使用:
pgrep mysql | xargs kill -s 9ps -ef | grep mysql | grep -v grep | awk '{print $2}' | xargs kill -9kill -s 9 `pgrep mysql`
如果觉得《【Linux】进程管理之kill killall pkill》对你有帮助,请点赞、收藏,并留下你的观点哦!