我有一个bash脚本,它在循环中执行以下操作:
问题是脚本在我调用它时需要大约1%的CPU,随着时间的推移,让我们说2-3小时之后,我看到相同的脚本占用了大约10%的CPU并略微消耗了更多随着时间的推移会有更多的CPU。
我在两种环境中使用此脚本:
现在,我还注意到如果我尝试ping的主机没有响应(所以ping超过1秒后返回),问题就不会发生。 只有当LAN上的主机响应并且在回复得到回复后ping快速返回时才会出现问题。
使用VMWare,我根本没有观察到这个问题。无论其他主机是否响应。因此,我认为它实际上与重要的多核环境有关。
此外,' strace -c'显示bash脚本占用了waitpid()的99% - 这意味着它会休眠并等待其子进程(sleep& ping)退出。
#!/bin/bash
if [ "$1" == "" ]; then
echo -e "\nUsage: $0 <target host>\n"
exit 1
fi
TARGET_HOST=$1
while (true); do
sleep 0.04
ping $TARGET_HOST -W 1 -c 1 > /dev/null 2>&1
done