linux - Bash 脚本遍历 PID 并杀死项目

标签 linux bash ubuntu kill

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

#!/usr/bin/env bash

SUPERVISORCLS=($(pidof supervisorctl))

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

在我尝试像这样作为重新启动脚本的解决方案之前,但是如果执行了 block ,脚本并不总是总执行一次总是只执行一次。?

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 后执行其他语句。您的流程将不复存在。在第一个示例中,您的进程将不再是您的脚本,而在第二个示例中将是 killpkill

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

关于linux - Bash 脚本遍历 PID 并杀死项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36345910/

相关文章:

linux - 如何测试网络内核模块的 tx_timeout 操作?

css - 删除 CSS 注释的 sed 命令不起作用

bash - 如何在 bash 脚本中正确循环?

php - 在 Ubuntu Server 14.04 上安装了 Nginx,但无法在 html 文件夹中创建任何文件?

ruby-on-rails - 木材 : Command 'lumber' not found

用于在文本文件中的每个字符后引入单个空格的 linux 命令

python - 想要在同一个 python 脚本中比较 bash 和 python 的时间

linux - 在 Unix/macOS 系统事件上触发脚本

regex - 如何在 bash 正则表达式中匹配 "something or nothing"?

ruby-on-rails - Ubuntu 13.10 上的 rvm 要求错误