0

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

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 以防其他 java 应用程序正在运行

  2. 如果检测到重复,它会获取最近重复的进程 id(即忽略原始的)并尝试杀死重复。

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

这是一个示例错误

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

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

谢谢你的帮助

4

1 回答 1

0

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

于 2013-09-28T02:39:25.887 回答