ps -p {pid} -o etime获取进程运行时间是如何计算出来的?

libraco
  • 760

ps -p 986 -o etime可以获取进程986的执行时间,不论系统时间有没有发生改变,它都可以返回正确的结果:

-bash-4.2$ ps -p 986 -o etime
    ELAPSED
13-00:25:12

以上显示986进程运行了13天25分钟12秒。

可见它累积的是真正的程序运行时间,而不是系统运行时间与进程启动之间之差(这种方式在时间同步等其他会引起系统时间变化的情况下并不准确)。

我查看了/proc/986/stat, /proc/986/status等系统文件,都没有发现对应的进程运行时间的数值,ps -p 986 -o etime到底是如何实现的呢?

回复
阅读 3.2k
1 个回答

真的是根据 系统运行时间与进程启动之间之差 来计算的。
系统的运行时间(详见 /proc/uptime)是根据自系统启动后经过了多少 秒(实际上是 clock tick,),而不是根据系统时间,所以不会受系统时间的改变而影响;
同理,进程启动时间 也是 自系统启动后经过了多少 秒;
二者之差就得出了 该进程的运行时间

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏