可使用ps命令的lstart字段直接获取进程精确启动时间(YYYY-MM-DD HH:MM:SS),或用etime结合当前时间反推,旧系统可用STIME粗略判断,/proc/PID/stat第22字段配合btime可实现底层高精度计算。

如果您需要确认某个进程是何时启动的,以便排查异常行为或分析服务运行周期,则需借助 Linux 系统提供的进程时间字段。以下是多种可靠方法,适用于不同版本和需求场景:
一、使用 ps -eo 输出 lstart 字段获取精确启动时间点
lstart 字段直接显示进程启动的完整日期与时间(格式为 YYYY-MM-DD HH:MM:SS),可读性强,无需计算,适用于所有支持该字段的系统。
1、执行命令:ps -eo pid,lstart,comm
2、若需筛选特定进程,追加管道过滤:ps -eo pid,lstart,comm | grep nginx
3、如仅关注某进程 ID(例如 1234),可限定输出:ps -o lstart= -p 1234
二、使用 ps -eo 输出 etime 字段换算启动时间
etime 表示进程自启动以来经过的秒数(含休眠时间),结合当前系统时间即可反推启动时刻,适合需量化运行时长的场景。
1、获取进程 etime 值:ps -o pid,etime,comm -p 1234
2、提取 etime 数值后,用 date 命令计算启动时间戳:date -d "$(date +%s) seconds ago" "+%Y-%m-%d %H:%M:%S"
3、若需批量查看前 5 个最早启动的进程:ps -eo pid,etime,comm --sort=-etime | head -5
三、使用 ps -ef 或 ps aux 辅助判断启动时间(兼容旧系统)
部分老旧系统(如 CentOS 6)的 ps 版本不支持 lstart 或 etime,此时可通过 STIME 字段粗略定位——它显示进程启动的月日及时钟时间,但跨月或跨年时仅显示年份或省略年份。
1、运行标准格式命令:ps -ef | head -10
2、观察 STIME 列内容:若显示 May12 表示本月12日;若显示 2025 表示去年启动;若仅显示 10:23 表示今日启动。
3、配合 tty 和 user 字段缩小范围:ps -eo pid,user,tty,stime,cmd | grep "python"
四、通过 /proc/PID/stat 提取启动时间(底层精确方式)
/proc/PID/stat 文件第 22 个字段为进程启动时间戳(单位:jiffies,即内核滴答数),需结合系统启动时间(/proc/stat 中 btime)换算为 Unix 时间戳,精度最高,适用于调试或脚本自动化。
1、读取目标进程 stat 文件第 22 字段:awk '{print $22}' /proc/1234/stat
2、获取系统启动时间(btime):grep btime /proc/stat | awk '{print $2}'
3、计算进程启动秒数:echo $(($(awk '{print $22}' /proc/1234/stat) / $(getconf CLK_TCK))) + $(grep btime /proc/stat | awk '{print $2}') | bc

















