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