[英]How to get stat information from a child process to measure resource utilization?
我觉得这肯定有一个简单的答案,但我真的不知道该如何处理。
对于背景,一堆东西是这样的:
Python script -> C++ binary -(fork)-> actual thing we want to measure.
本质上,我们有一个python脚本,它通过使用tmp目录并运行我们正在开发的该网络软件堆栈的多个实例来模拟环境。 该脚本调用主机二进制文件(此处不重要),然后在加载后调用帮助程序二进制文件。 可以向辅助二进制文件传递参数以进行守护进程,并且在执行此操作时,它将以通常的方式进行派生。
我们需要做的是测量守护程序的CPU使用率,但是我真的不知道如何做。 我所做的是定期读取stat文件,但是由于该进程是守护进程,因此无法使用echo $!
获取其PID。 使用ps aux | grep 'thing'
ps aux | grep 'thing'
工作正常,但是我认为这给了我父进程,因为stat信息如下所示:
1472582561 9455 (nlsr) S 1 9455 9455 0 -1 4218944 394 0 0 0 13 0 0 0 20 0 2 0 909820 184770560 3851 18446744073709551615 4194304 5318592 140734694817376 140734694810512 140084250723843 0 0 16781312 0 0 0 0 17 0 0 0 0 0 0 7416544 7421528 16224256 140734694825496 140734694825524 140734694825524 140734694825962 0
我知道父进程不应为PID1,并且肯定 utime
字段及类似字段应大于13个时钟滴答。 这就是使我得出的结论,即该过程实际上是父过程,而不是完成所有工作的分叉孩子。
我几乎可以修改任何必要的文件,但是由于代码审查约束,设计规范等原因,我对许多文件所做的更改越少越好。
可靠地获取孩子的PID
fork()
将孩子的PID返回给父对象 从/proc/[PID]/stat
获取CPU统计信息
#14
utime
用户代码中花费的CPU时间,以时钟周期为单位
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.