杀死多个进程错误

时间:2013-09-27 22:01:32

标签: linux bash grep

有人可以告诉我为什么这有时会失败:

if [ $(pgrep -f agent.jar | wc -l) -gt 1 ]; then
  kill $(pgrep -f agent.jar | grep -v $(pgrep -of agent.jar) | sort -n | uniq | awk '{printf $1" "}');
fi

这部分代码的目标是:

  1. 检查是否存在重复的进程。请注意我如何引用.jar文件而不是java incase正在运行其他java应用程序

  2. 如果检测到重复项,它会获取最新重复项的进程ID(即遗漏原始项)并尝试终止重复项。

  3. 代码效果很好。它检测到重复并杀死它们,但有时它会获取第三个进程(可能是grep pid或ps pid)并试图杀死它。我不知道它的发现是什么随机PID。它唯一的暂时性,这就是为什么我猜测它的部分杀线。

    以下是错误示例

    /start.sh: line 15: [: 3183: binary operator expected
    

    这最终会把这个错误抛给看起来很糟糕的终端。有可能忽略它,因为它本来可以做它的工作,但是这将是草率的,并且有可能出现一些其他条件破坏脚本,所以理想情况下我需要修复它。

    感谢您的帮助

1 个答案:

答案 0 :(得分:0)

它失败(有时),因为在最糟糕的情况下你得到3个不同的pid列表。查询一次pgrep-list并再次使用ps -p检查pid。