前言
這篇文章主要講獲取Linux系統(tǒng)中獲取進程啟動時間和存活時間的方法,內(nèi)容沒有很多,直接上干貨
有時候我們會希望查看Linux服務器上面某個進程的啟動時間和存活時間,有些讀者可能會想到通過top -p [pid]的方式來進行獲取,但實際上top命令展示的TIME+字段表示的并不是進程存活的時間,而是這個進程累積使用的CPU時間,如果一個進程使用的cpu很少,那即使這個進程已經(jīng)存在N長時間,TIME+ 的值也是很小的數(shù)值。也就是說,TIME+字段的值并不能直接反映出進程的存活時間。

image.png
對這種情況,我們可以使用ps命令來滿足我們的需要,常用的ps -ef命令默認是按照UID PID PPID C STIME TTY TIME CMD來展示信息的,這幾個字段對應的含義如下:
| 字段名 | 含義 | |
|---|---|---|
| UID | 進程所有者的用戶名或用戶ID(UID)。 | |
| PID | 進程的ID。 | |
| PPID | 父進程的ID。 | |
| C | CPU使用率(%),進程占用的CPU時間比例。 | |
| STIME | 進程的開始時間。 | |
| TTY | 啟動進程的終端類型,如果進程不是從終端啟動的,可能會顯示 ? 或具體的終端名。 | |
| TIME | 進程占用的總CPU時間,包括用戶空間和內(nèi)核空間。 | |
| CMD | 啟動進程的命令名稱。 |
我們可以看到,STIME表示進程的開始時間,似乎這個字段就可以滿足我們的需要。事實上,如果對進程啟動時間沒有比較精確要求的話STIME確實可以滿足我們的需要,因為STIME字段其實算是啟動時間的縮寫版本,對于當天啟動的進程來說,這個字段的值會是啟動的時間(格式:時:分,例如18:00),對于早于當天但在今年內(nèi)啟動的進程,這個字段的值會是啟動的日期(格式:月日,例如7月20),對于早于今年啟動的進程,這個字段的值就直接展示具體啟動的年份了。按我觀察的話,似乎結果都是不超過5個字符的。

ps -ef命令執(zhí)行結果
如果我們希望獲取進程啟動的詳細日期怎么辦?
答案是使用自定義的輸出格式,比如ps -eo pid,lstart,etime,cmd (選項o表示使用用戶自定義的格式進行輸出)
| 參數(shù) | 含義 |
|---|---|
| start | 顯示進程啟動時間的簡短格式。通常,它會顯示日期時間中的月-日 或者 時-分-秒 |
| start_time | 顯示進程啟動時間的簡短格式,通常格式是 年 或者 月-日 或者 時-分,沒有秒 |
| etime | 顯示進程啟動的累積時間,通常格式是 天-時-分-秒 |
| etimes | 顯示進程啟動的累積時間,通常格式是以秒為單位 |
| lstart | 顯示進程的啟動時間的長格式,通常格式是 星期-月-日 時-分-秒 年 |
| stime | 進程啟動時間,和start類似,通常格式是 年 或者 月-日 或者 時-分,沒有秒 |

ps -eo命令執(zhí)行結果
基于
lstart和etime字段,我們可以從結果中看到對應進程的完整啟動時間和持續(xù)時間