在linux中,从/proc/PID/stat
,我可以得到start_time
(22:nd)字段,它表示内核启动后多长时间启动了进程。
将其转换为自纪元以来的秒数格式的好方法是什么?将其添加到btime
?/proc/stat
基本上,我正在寻找年龄该过程的具体时间,而不是确切的开始时间。我的第一个方法是将start_time
正在调查的进程与当前进程的进行比较start_time
(假设它没有运行很长时间)。
当然一定有更好的方法。
查看时没有发现任何明显的与年龄相关的参数https://www.kernel.org/doc/Documentation/filesystems/proc.txt
所以,我目前拥有的是:
process age = (current_utime - ([kernel]btime + [process]start_time))
在 shell 脚本中是否有更有效的替代方法? (理想情况下在夏令时更改时正确)
答案1
从版本 3.3.0 开始, Linux 上的ps
ofprocps-ng
有一个etimes
输出字段,可以为您提供自进程启动以来经过的时间(以秒为单位)(顺便说一下,这不一定与自上次进程执行命令(如果有的话!)(进程运行进程名称中的命令的时间),因此可能没有您想象的那么有用)。
因此你可以这样做:
ps -o etimes= -p "$pid"
对于 Unix 纪元时间的开始时间(使用 GNU date
):
(export TZ=UTC0 LC_ALL=C; date -d "$(ps -o lstart= -p "$pid")" +%s)
请注意,您不能使用 的修改时间/proc/$pid
。这正是这些文件被实例化的时间这与进程的开始时间无关。
答案2
进程年龄:人类可读的形式
ps -p 1234 -o etime -h
1-02:03:04
进程自纪元以来的第二个
stat --format=%Y /proc/1234
年龄第二
expr $(date +%s) - $(stat --format=%Y /proc/1234)
额外资源ps(1)
,stat(1)