前言
这篇文章主要讲获取Linux系统中获取进程启动时间和存活时间的方法,内容没有很多,直接上干货
有时候我们会希望查看Linux服务器上面某个进程的启动时间和存活时间,有些读者可能会想到通过top -p [pid]
的方式来进行获取,但实际上top
命令展示的TIME+
字段表示的并不是进程存活的时间,而是这个进程累积使用的CPU时间,如果一个进程使用的cpu很少,那即使这个进程已经存在N长时间,TIME+
的值也是很小的数值。也就是说,TIME+
字段的值并不能直接反映出进程的存活时间。
对这种情况,我们可以使用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时间,包括用户空间和内核空间。 | |
CMD | 启动进程的命令名称。 |
我们可以看到,STIME
表示进程的开始时间,似乎这个字段就可以满足我们的需要。事实上,如果对进程启动时间没有比较精确要求的话STIME
确实可以满足我们的需要,因为STIME
字段其实算是启动时间的缩写版本,对于当天启动的进程来说,这个字段的值会是启动的时间(格式:时:分
,例如18:00),对于早于当天但在今年内启动的进程,这个字段的值会是启动的日期(格式:月日
,例如7月20),对于早于今年启动的进程,这个字段的值就直接展示具体启动的年份了。按我观察的话,似乎结果都是不超过5个字符的。
如果我们希望获取进程启动的详细日期怎么办?
答案是使用自定义的输出格式,比如ps -eo pid,lstart,etime,cmd
(选项o表示使用用户自定义的格式进行输出)
参数 | 含义 |
---|---|
start | 显示进程启动时间的简短格式。通常,它会显示日期时间中的月-日 或者 时-分-秒 |
start_time | 显示进程启动时间的简短格式,通常格式是 年 或者 月-日 或者 时-分,没有秒 |
etime | 显示进程启动的累积时间,通常格式是 天-时-分-秒 |
etimes | 显示进程启动的累积时间,通常格式是以秒为单位 |
lstart | 显示进程的启动时间的长格式,通常格式是 星期-月-日 时-分-秒 年 |
stime | 进程启动时间,和start类似,通常格式是 年 或者 月-日 或者 时-分,没有秒 |
基于
lstart
和etime
字段,我们可以从结果中看到对应进程的完整启动时间和持续时间