【发布时间】:2025-11-28 07:00:01
【问题描述】:
我想杀死所有包含一些字符串的进程。我为此编写了脚本。但是,当我执行它时,它会在 for 循环的第一次迭代后获得“Killed”信号。这是我的代码:
#!/bin/bash
executeCommand () {
local pname="$1";
echo $HOSTNAME;
local search_terms=($(ps aux | grep $pname | awk '{print $2}'))
for pros in "${search_terms[@]}"; do
kill -9 "$pros"
echo $pros
done
exit
}
executeCommand "$1" # get the string that process to be killed contains
我像./my_script.sh zookeeper 一样执行它。
当我删除包含kill 命令的行时,for loop 会一直执行到结束,否则,在第一个kill 命令之后,我得到一个输出“Killed”并且程序退出。
这可能是什么原因,以及实现我目标的任何其他解决方案?
【问题讨论】:
-
“实现[你的]目标的其他解决方案”——你考虑过
pkill吗? -
顺便说一句,您的代码是否有可能在名为
zookeeper的用户帐户下运行? -
不。事实上,如果我从 for 循环输出 PID 并手动杀死 -9 它们一切正常。但是当把它们放在一起时,我就有麻烦了。我现在正在检查您提出的解决方案。
-
您只在脚本执行期间收到错误是您应该预料到的行为,并且不会对此感到惊讶——只有在循环运行时,例如
grep(或脚本的其他组件)是活跃存在的 PID,因此可以在列表中找到并终止。 -
除非你知道
-15(默认)和-2不起作用,否则不要使用kill -9。
标签: linux bash shell scripting