You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Linux系统如何测量特定进程的已流逝运行时长?

进程已流逝时长的正确实现逻辑

你之前的计算方向本身存在偏差:用户态CPU时间+内核态CPU时间是进程实际占用CPU运行的总时长,进程大部分生命周期可能处于休眠、IO等待等不占用CPU的状态,所以这个求和结果必然和真实流逝时长不匹配。

ps命令输出的etime(已流逝时长)计算逻辑非常直接:用当前时间减去进程的启动时间戳,和CPU占用数据完全无关。

基于/proc文件系统的具体实现步骤

  • 第一步:读取/proc/stat第一行的btime字段,获取系统启动时的Unix时间戳,单位为秒。
  • 第二步:读取目标进程/proc/<PID>/stat文件,按空格分割后取第22个字段,得到进程启动时距离系统启动的时钟滴答数。
  • 第三步:将时钟滴答数转换为秒:将该字段值除以系统时钟频率,系统时钟频率可以通过sysconf(_SC_CLK_TCK)接口获取,常规x86平台下默认值为100。
  • 第四步:计算进程启动的Unix时间戳 = 系统启动时间戳 + (进程启动滴答数 / 系统时钟频率)
  • 第五步:当前系统Unix时间戳减去进程启动时间戳,得到的就是进程从启动到当前的已流逝时长。

已退出进程的时长统计逻辑

如果进程已经终止,/proc/<PID>目录会被系统回收,ps之所以能统计到已退出进程的时长,是因为它读取了进程会计日志、或者进程描述符未被完全回收的残留信息。如果你的业务需要统计已退出进程的全生命周期时长,建议提前开启系统进程会计功能,或者在进程运行阶段主动记录其启动、退出时间戳。

正确性验证

你可以通过简单测试验证逻辑:执行sleep 300 &启动一个后台休眠进程,拿到PID后按上述步骤计算时长,结果和ps -o etime= <PID>输出的时长完全一致。

内容的提问来源于stack exchange,提问作者kinder Hong

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 16:15:03