当前位置: 首页>>技术教程>>正文


bash – Shell脚本根据名称杀死-9

, ,

问题描述

有没有办法(也许是脚本)如何自动执行此过程:

petr@sova:~$ ps -ef | grep middleman
petr     18445  2312  1 12:06 pts/2    00:00:01 /home/petr/.rvm/gems/ruby-1.9.3-p362/bin/middleman                                                                  
petr     18581 13621  0 12:08 pts/0    00:00:00 grep --color=auto middleman
petr@sova:~$ kill -9 18445

不幸的是,pkill太弱了,因为我必须在kill上使用-9选项。

最佳答案

您可以使用Shell为您完成此任务:

kill -9 $(pidof middleman)

shell 程序首先执行命令pidof middlemanpidof(8)的输出是进程ID。因此,shell将pidof-命令替换为进程ID,然后执行kill -9 18845(或任何正确的进程ID)。

次佳答案

有一个比qbi更简单的解决方案:killall让您按名称杀死进程,并且可以指定信号。

killall -9 middleman

有关更多信息和更多选项,请参见man killall(有很多)。

顾名思义,这确实将信号发送到名为middleman的所有进程。但这与其他方式(例如pkill)没有什么不同。此外,pkill -9 middleman还将以名称匹配但不等于middleman的进程为目标,例如middleman2

第三种答案

其他答案是完全正确的,但我不妨添加第三个选项,以便在此处进行全部记录。您还可以使用:

pkill -9 middleman

有关更多信息和其他选项,请参见man pkill

使用哪种方法并不重要。他们都会工作。但是,如果要以某种方式修改行为,则知道这些选项是否有用,因为相应的手册页会显示其他可用的匹配选项。

第四种答案

pkill -9 -f middleman

-f选项使它与完整的命令行匹配,而不是仅与进程名称匹配。

请注意,-9应该是不得已的信号,而不是常规使用的信号。

第五种答案

只是为了好玩,我想添加一种更手动的旧式方式

kill -9 `ps aux | grep middleman | awk '{print $2}'`

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/9435.html,未经允许,请勿转载。