Linux - 如何根据名字杀掉一个进程

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

Linux提供了许多工具来管理系统中的进程。你可以用它们来创建、克隆、甚至销毁进程(create, clone, destroy)。有时你可能需要在Linux中按名称杀死所有进程。在Linux中有多种方法可以做到这一点。你可以使用pkill、pgrep、pidof和killall中的任何一个函数。在这篇文章中我们将详细介绍它们。现在的例子都是在Ubuntu中运行的。

1, 使用pkill命令

pkill命令允许你直接按名称杀死进程。例如以下是杀死所有以apache为名的进程的命令

$ sudo pkill apache

pkill命令使用格式

pkill [options] <pattern>

注意这个参数是一个pattern是一个正则表达式。如果使用apache那所有名字中包含apache的进程都会被杀掉。

如果命令是

$ sudo pkill apache$

那就是杀掉所有名字结尾是apache的进程。

需要注意的是这里的进程命不包括选项部分比如在Ubuntu系统里使用ps命令查看到一个进程

/usr/lib/xorg/Xorg vt2 -displayfd 3 -auth /run/user/1000/gdm/Xauthority -background none -noreset -keeptty -verbose 3

这个进程的名字就是前面的路径加进程名而后面的长长选项都不是进程的名字。

可以直接使用ps -ef命令查看全部进程里面包含完整的进程命。比如在当前路径下有个程序test运行后显示进程名

$ ./test

$ pwd

/home/ubuntu/Workspace/01_pkill

$ /home/ubuntu/Workspace/01_pkill/test

$ ps -ef  | grep test$

vm          2662    1628 99 09:12 pts/0    00:19:37 /home/ubuntu/Workspace/01_pkill/test

vm          3185    1628 99 09:29 pts/0    00:02:43 ./test

2使用pgrep

pgrep命令根据输入的搜索字符串返回一个PID的列表。所以你也可以使用pgrep命令按其名称搜索所有的命令并使用kill命令来杀死Linux中的这些进程。

下面的命令将列出所有名字为apache的进程的PIDs

$ pgrep apache

6123

6230

可以加上kill命令杀掉搜索名字得到的PID

$ kill -9 `pgrep apache`

这里的kill -9是强制杀死某个进程。pgrep命令输出所有名字包含apache的进程PID作为kill命令的输入可以一次杀死多个进程。

pgrep的用法

pgrep [options] <pattern>

所以参数也是一个正则表达式和pkill一样。

3使用pidof

类似的使用pidof命令也可以根据进程名获取PID列表。

$ pidof apache

6123 6230

然后就可以使用kill命令来根据PID杀死进程

$ kill -9 `pidof apache`

pidof命令的用法

pidof [options] program [program...]

可以看到可以后面接多个参数一次返回多个进程名的ID。

pidof和pgrep的区别是后面的参数需要是完全匹配的进程名。要么是和程序名一样要么是和完整路径名加程序名一样。

4使用killall

使用killall命令根据名字直接杀死进程

$ killall -9 apache

这个命令和pidof类似给出的名字要完全匹配要么和程序名一样要么是和完整路径名加程序名一样。

5其他方法

如果不使用上面这些工具而杀掉某个进程的原始方法恐怕是使用ps命令显示出所有进程按名字找到进程信息所在行的PID再使用kill命令。

或者使用ps | grep procName来快速定位进程信息找出PID再执行kill命令。这样使用没有上面的方法快。

$ ps | grep test

   3450 pts/0    00:00:03 test

$ kill 3450

[1]+  Terminated              ./test

总结

按照是模式匹配还是完全匹配名称将pgrep/pkill和pidof/killall区分开来。

按照取得PID信息和直接执行kill操作将pkill/killall和pgrep/pidof区分开来。

参考

How to Kill Process by Name in Linux - Ubiq BI

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: linux