获取进程启动时间

ps 检查启动时间

使用 ps进程检查工具 命令可以轻易获得进程启动时间:

  • 检查进程启动时间 lstart :

检查进程启动时间,例如 qemu-system-x86
ps -eo pid,ppid,lstart,cmd | grep qemu-system-x86_64

输出显示案例类似如下:

检查进程启动时间,例如 qemu-system-x86 可以看到详细的启动时间
   7300 Sun Aug  6 11:10:56 2023 /usr/bin/qemu-system-x86_64 -name guest=z-b-data-3,...
   7354 Sun Aug  6 11:11:03 2023 /usr/bin/qemu-system-x86_64 -name guest=z-b-data-1,...
   7405 Sun Aug  6 11:11:09 2023 /usr/bin/qemu-system-x86_64 -name guest=z-b-data-2,...

备注

ps 检查进程启动时间的 field 格式参数可以有3种:

  • start 启动时间类似 09:46:10 ,但是超过24小时的进程会显示为日期,类似 Aug 31

  • stime 启动时间类似 09:10 ,但是超过24小时的进程也是显示为日期,类似 Aug31

  • lstart 启动时间最详尽和标准化,非常方便对比检查,类似 Thu Aug 31 23:58:01 2023 强烈推荐

stat 获取进程启动时间

我在生产实践中遇到过一种异常情况,OS异常导致 ps 命令无法执行。这时候可以考虑从 /proc 目录下进程对应pid的 stat 来获取信息:

从进程的 procfsstat 来获得启动时间
# 这里 <PID> 替换成进程pid
awk -v ticks="$(getconf CLK_TCK)" 'NR==1 { now=$1; next }
    END { print strftime("%c", systime() - (now-($20/ticks))) }' /proc/uptime RS=')' /proc/<PID>/stat

备注

stat 文件中读取的数值是从系统启动到进程启动启动之间的 clock ticks ,上述脚本命令做了转换

参考