从命令行获取进程年龄

从命令行获取进程年龄

在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 上的psofprocps-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)

相关内容