鍍金池/ 問答/Linux/ ps -p {pid} -o etime獲取進程運行時間是如何計算出來的?

ps -p {pid} -o etime獲取進程運行時間是如何計算出來的?

ps -p 986 -o etime可以獲取進程986的執(zhí)行時間,不論系統(tǒng)時間有沒有發(fā)生改變,它都可以返回正確的結(jié)果:

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

以上顯示986進程運行了13天25分鐘12秒。

可見它累積的是真正的程序運行時間,而不是系統(tǒng)運行時間與進程啟動之間之差(這種方式在時間同步等其他會引起系統(tǒng)時間變化的情況下并不準確)。

我查看了/proc/986/stat, /proc/986/status等系統(tǒng)文件,都沒有發(fā)現(xiàn)對應的進程運行時間的數(shù)值,ps -p 986 -o etime到底是如何實現(xiàn)的呢?

回答
編輯回答
喜歡你

真的是根據(jù) 系統(tǒng)運行時間與進程啟動之間之差 來計算的。
系統(tǒng)的運行時間(詳見 /proc/uptime)是根據(jù)自系統(tǒng)啟動后經(jīng)過了多少 秒(實際上是 clock tick,),而不是根據(jù)系統(tǒng)時間,所以不會受系統(tǒng)時間的改變而影響;
同理,進程啟動時間 也是 自系統(tǒng)啟動后經(jīng)過了多少 秒;
二者之差就得出了 該進程的運行時間

2018年3月31日 11:39