【问题标题】:Bash script iterate over PID's and kill itemsBash 脚本遍历 PID 并杀死项目
【发布时间】:2016-04-01 00:08:27
【问题描述】:

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

#!/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

【问题讨论】:

    标签: linux bash ubuntu kill


    【解决方案1】:

    exec 将您的进程替换为作为它的参数的可执行文件,因此在脚本中遇到exec 后,您将永远不会在脚本中执行另一条语句。您的进程将不再存在。在第一个示例中,您的进程将不再是您的脚本,而在第二个示例中将是 killpkill

    要修复它,只需从所有这些行中删除 exec。这不是必需的。执行脚本时,shell 将在每一行执行命令,您不必告诉它这样做。

    【讨论】:

      猜你喜欢
      • 2017-08-04
      • 2011-05-11
      • 1970-01-01
      • 2016-01-24
      • 2017-10-06
      • 1970-01-01
      • 2017-03-31
      • 1970-01-01
      • 2015-12-22
      相关资源
      最近更新 更多