Bash 脚本遍历 PID 并杀死项目
Bash script iterate over PID's and kill items
我试图终止一个进程的所有出现,实际上迭代在第一个项目之后停止发生了什么,这里有什么问题?
#!/usr/bin/env bash
SUPERVISORCLS=($(pidof supervisorctl))
for i in "${SUPERVISORCLS[@]}"
do
echo $i
exec sudo kill -9 ${i}
done
在我尝试像这样作为重新启动脚本的解决方案之前,但是脚本并不总是全部执行,如果块被执行,总是只有一个。?
ERROR0=$(sudo supervisord -c /etc/supervisor/supervisord.conf 2>&1)
if [ "$ERROR0" ];then
exec sudo pkill supervisord
exec sudo supervisord -c /etc/supervisor/supervisord.conf
echo restarted supervisord
fi
ERROR1=$(sudo supervisord -c /etc/supervisor/supervisord.conf 2>&1)
if [ "$ERROR1" ];then
exec sudo pkill -9 supervisorctl
exec sudo supervisorctl -c /etc/supervisor/supervisord.conf
echo restarted supervisorctl
fi
exec
将您的进程替换为作为它参数的可执行文件,因此您永远不会在遇到 exec
后在脚本中执行其他语句。您的流程将不复存在。在第一个示例中,您的流程将不再是您的脚本,而在第二个示例中将是 kill
和 pkill
。
要修复它,只需从所有这些行中删除 exec
。不需要。执行脚本时,shell 会在每一行执行命令,您不必告诉它这样做。
我试图终止一个进程的所有出现,实际上迭代在第一个项目之后停止发生了什么,这里有什么问题?
#!/usr/bin/env bash
SUPERVISORCLS=($(pidof supervisorctl))
for i in "${SUPERVISORCLS[@]}"
do
echo $i
exec sudo kill -9 ${i}
done
在我尝试像这样作为重新启动脚本的解决方案之前,但是脚本并不总是全部执行,如果块被执行,总是只有一个。?
ERROR0=$(sudo supervisord -c /etc/supervisor/supervisord.conf 2>&1)
if [ "$ERROR0" ];then
exec sudo pkill supervisord
exec sudo supervisord -c /etc/supervisor/supervisord.conf
echo restarted supervisord
fi
ERROR1=$(sudo supervisord -c /etc/supervisor/supervisord.conf 2>&1)
if [ "$ERROR1" ];then
exec sudo pkill -9 supervisorctl
exec sudo supervisorctl -c /etc/supervisor/supervisord.conf
echo restarted supervisorctl
fi
exec
将您的进程替换为作为它参数的可执行文件,因此您永远不会在遇到 exec
后在脚本中执行其他语句。您的流程将不复存在。在第一个示例中,您的流程将不再是您的脚本,而在第二个示例中将是 kill
和 pkill
。
要修复它,只需从所有这些行中删除 exec
。不需要。执行脚本时,shell 会在每一行执行命令,您不必告诉它这样做。