当前位置:首页 » 《随便一记》 » 正文

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

29 人参与  2023年05月06日 12:09  分类 : 《随便一记》  评论

点击全文阅读


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


点击全文阅读


本文链接:http://zhangshiyu.com/post/61100.html

<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

关于我们 | 我要投稿 | 免责申明

Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1