问题描述
有没有办法(也许是脚本)如何自动执行此过程:
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 middleman
。 pidof(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}'`