![根据名称执行 -9 终止的 Shell 脚本](https://linux22.com/image/830168/%E6%A0%B9%E6%8D%AE%E5%90%8D%E7%A7%B0%E6%89%A7%E8%A1%8C%20-9%20%E7%BB%88%E6%AD%A2%E7%9A%84%20Shell%20%E8%84%9A%E6%9C%AC.png)
有没有办法(可能是脚本)来自动化这个过程:
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
太弱了,因为我必须-9
选择kill
。
答案1
有一个比 qbi 更简单的解决方案:killall
让您按名称终止进程,并且可以指定信号。
killall -9 middleman
看man killall
以获取更多信息和额外选项(有很多)。
顾名思义,这确实会向全部名为 的进程middleman
。但这与其他方式(如 )并没有什么不同pkill
。此外,pkill -9 middleman
还将针对名称匹配但不等于 的进程middleman
,例如middleman2
。
答案2
您可以使用 shell 为您完成此任务:
kill -9 $(pidof middleman)
shellpidof middleman
首先执行该命令。输出pidof(8)是进程 ID。因此,shell 将pidof
用进程 ID 替换 -command 并执行kill -9 18845
(或任何正确的进程 ID)。
答案3
其他答案完全正确,但我不妨添加第三个选项,以便所有答案都记录在这里。您还可以使用:
pkill -9 middleman
请参阅man pkill
以了解更多信息和额外选项。
您使用哪种方法其实并不重要。它们都可以工作。但是,如果您想以某种方式修改行为,了解这些选项会很有用,因为相应的手册页显示了可用的其他匹配选项。
答案4
pkill -9 -f middleman
该-f
选项使其匹配完整的命令行,而不仅仅是进程名称。
请注意,这-9
应该是最后手段信号,而不是常规使用的信号。