答案是通过解析/proc/[pid]/stat文件第22个字段starttime并结合系统启动时间和时钟频率可计算进程启动时间,也可使用ps命令直接查看;具体步骤为:先用pidof或ps获取PID,再读取/proc/[pid]/stat第22字段值,除以CLK_TCK得到自系统启动以来的秒数,加上系统启动时间的纪元秒数后转换为可读格式;此外可用ps -o lstart [pid]直接显示启动时间,或通过systemctl status查看systemd服务的启动时间。

要查看Linux进程的启动时间,核心在于读取
/proc/[pid]/stat
/proc/[pid]/stat文件解析及命令组合
/proc/[pid]/stat
starttime
找到进程PID: 首先,你需要知道目标进程的PID。可以使用
ps aux | grep <process_name>
pidof <process_name>
读取/proc/[pid]/stat
cat /proc/[pid]/stat
提取starttime
awk
cat /proc/[pid]/stat | awk '{print $22}'计算启动时间:
starttime
uptime -s
getconf CLK_TCK
starttime
一个完整的Shell脚本示例:
#!/bin/bash
process_name=$1
pid=$(pidof "$process_name")
if [ -z "$pid" ]; then
echo "Process $process_name not found."
exit 1
fi
starttime=$(cat /proc/$pid/stat | awk '{print $22}')
boottime=$(uptime -s)
clk_tck=$(getconf CLK_TCK)
seconds=$((starttime / clk_tck))
# Convert boottime to epoch seconds
boottime_epoch=$(date -d "$boottime" +%s)
# Calculate process start time in epoch seconds
start_epoch=$((boottime_epoch + seconds))
# Convert epoch seconds to human-readable format
start_time=$(date -d @$start_epoch)
echo "Process $process_name (PID: $pid) started at: $start_time"这个脚本接受进程名作为参数,然后计算并打印出进程的启动时间。
除了
/proc/[pid]/stat
ps
ps -o lstart <pid>
ps -o lstart 12345
ps -o etime <pid>
ps -o etime 12345
ps -aux
START
START
需要注意的是,使用
ps
有时候,由于系统时间调整、进程重启等原因,通过
/proc/[pid]/stat
ps
系统时间调整: 如果在进程运行期间系统时间被调整,那么计算出来的启动时间可能会出现偏差。 解决办法是在时间调整后重启进程,或者使用更可靠的时间戳记录方法。
进程重启: 如果进程被重启,那么
/proc/[pid]/stat
虚拟化环境: 在虚拟化环境中,由于时间同步问题,进程启动时间可能与宿主机不同步。 解决办法是配置虚拟机与宿主机之间的时间同步,或者使用虚拟化平台提供的API来获取准确的进程启动时间。
此外,一些进程管理工具(如
systemd
systemctl status <service_name>
systemd
总的来说,虽然
/proc/[pid]/stat
ps
以上就是Linux如何查看某个进程的启动时间的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号