如何获取程序的睡眠时间

如何获取程序的睡眠时间

我正在尝试收集每天运行的脚本的一些统计数据。我想了解实际用于睡眠的时间。有没有办法获得所有睡眠周期的总和。例如:

#some task
sleep 5
#some task
sleep 2

我希望结果为 7。该脚本包含许多具有多个循环和条件的文件。该解决方案需要运行脚本来查看 sleep 实际被调用的内容以及调用次数。

答案1

一个快速而肮脏的答案是只 grep 并使用 awk 将它们相加:

grep -o 'sleep [0-9]\+' input.sh | awk '{ sum +=$2 } END { print sum }'

这表示用于grep搜索“input.sh”。在每一行上仅打印 ( -o) 该行的匹配部分。匹配应该是sleep字符串后跟 1 个或多个 0 到 9 之间的数字。所以现在我们有一些只会打印出来的内容:

sleep 5
sleep 2

我们将该列表发送到awk其中,逐行进行处理并将所有第二列相加。最后打印出总数。

注意:这是一个相当脆弱的解决方案。例如,如果你有一行注释掉:

# we used to do sleep 1000 here by it was too slow

您仍会将其包含在总数中。如果您对脚本有更多了解,就可以创建更强大的管道。例如,如果您知道sleep调用始终位于行的开头,则可以锚定 grep:

grep -o '^sleep [0-9]\+' | ...

另外,一个包含很多睡眠的脚本也很可疑。几乎总是有更好的方法来组织自动化,而睡眠大多只对测试有用。

相关内容