首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何衡量睡眠的累计时间()?

如何衡量睡眠的累计时间()?
EN

Unix & Linux用户
提问于 2020-05-05 15:50:42
回答 1查看 133关注 0票数 0

我正在分析一个用bash和python编写的工具。顶层的调用遍历bash和python程序的许多层。完成时间为小时(4-5小时)。在这些错综复杂的调用中,有许多对sleep()的调用分布在许多文件/程序中。不同地方的睡眠时间不同。工具是单线程

一个main.sh调用foo.sh和bar.sh的例子。实际的工具有更多的文件,每个文件都很大,还有更多的行调用sleep()。更改所有文件(foo.sh、bar.sh)是不可行的。理想情况下,我想在main.sh中添加一些内容。

代码语言:javascript
复制
# main.sh
foo.sh
for (something):
  bar.sh    

# foo.sh

sleep 10

sleep 30
bar.sh

compute.py arg1 arg2

# bar.sh

while (something): 
  sleep 15

我想知道在sleep()上花了多少时间。

在工具启动和完成时,是否有一种方法可以获得在sleep()中花费的全部时间?

除此之外,你有没有任何你认为可能有帮助的建议/方向?是否有一种方法只适用于bash或python?

EN

回答 1

Unix & Linux用户

发布于 2020-05-05 23:19:15

一种选择可能是使用类似于sysdig的东西。如果我有一个shell脚本,比如:

代码语言:javascript
复制
#!/bin/bash

for ((i = 0; i < 10; ++i)); do
    sleep $((i + 5))
done

我可以像:

代码语言:javascript
复制
ex.sh& sudo sysdig proc.ppid=$! and evt.type=nanosleep and evt.dir='>'
[1] 34548
5578 19:12:08.307269713 4 sleep (34550) > nanosleep interval=6000000000(6s)
19206 19:12:14.308052173 0 sleep (34559) > nanosleep interval=7000000000(7s)
30764 19:12:21.308769638 4 sleep (34560) > nanosleep interval=8000000000(8s)
44222 19:12:29.309508180 0 sleep (34561) > nanosleep interval=9000000000(9s)
62699 19:12:38.310298027 4 sleep (34569) > nanosleep interval=10000000000(10s)
79052 19:12:48.311058659 0 sleep (34570) > nanosleep interval=11000000000(11s)
100582 19:12:59.311839491 4 sleep (34578) > nanosleep interval=12000000000(12s)
123807 19:13:11.312590028 0 sleep (34586) > nanosleep interval=13000000000(13s)
145141 19:13:24.313375302 4 sleep (34587) > nanosleep interval=14000000000(14s)

在这里,我寻找后台脚本(proc.ppid=$!)中的父进程,它调用nanosleep系统调用(evt.type=nanosleep),也就是syscall事件(evt.dir='>')。因为第一个人认为这个脚本是调用sleep,这最终导致了第一个事件的缺失。

该工具有许多筛选选项;您可以在用户指南中看到详细信息。您可能需要调整过滤器以使其与用例一致。我花了一些实验才发现,例如,sleep用于睡眠的特定系统调用。

票数 1
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/584722

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档