Bash脚本迭代PID并杀死项目

时间:2016-04-01 00:08:27

标签: linux bash ubuntu kill

我试图杀死所有出现的过程,实际上在第一个项目之后迭代停止的是什么,这里有什么问题?

#!/usr/bin/env bash

SUPERVISORCLS=($(pidof supervisorctl))

for i in "${SUPERVISORCLS[@]}"
    do
        echo $i
        exec sudo kill -9 ${i}
    done

在我尝试这样作为重启脚本的解决方案之前,但是脚本并不总是执行总计只有一个if块被执行。?

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

1 个答案:

答案 0 :(得分:2)

exec将可执行文件替换为您的进程,因此在您访问exec后,您永远不会在脚本中执行另一个语句。您的流程将不复存在。在第一个示例中,您的流程将不再是您的脚本,在第二个示例中它将是killpkill

要解决此问题,只需从所有这些行中删除exec即可。不需要它。执行脚本时,shell将在每一行执行命令,你不必告诉它这样做。