Mat*_*nco 6 linux shell-script process-management
在 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))
Run Code Online (Sandbox Code Playgroud)
任何在 shell 脚本中更有效的替代方法?(理想情况下跨 DST 更改是正确的)
Sté*_*las 11
从 3.3.0 版开始,Linux 上的ps
ofprocps-ng
有一个etimes
输出字段,它为您提供自进程启动以来经过的时间(以秒为单位)(顺便说一句,这不一定与自该进程上次执行以来经过的时间相同命令(如果有的话!)(该进程在进程名称中运行命令的时间),所以可能没有你想象的那么有用)。
所以你可以这样做:
ps -o etimes= -p "$pid"
Run Code Online (Sandbox Code Playgroud)
对于作为 Unix 纪元时间的开始时间(使用 GNU date
):
(export TZ=UTC0 LC_ALL=C; date -d "$(ps -o lstart= -p "$pid")" +%s)
Run Code Online (Sandbox Code Playgroud)
请注意,您不能使用 的修改时间/proc/$pid
。那只是这些文件被实例化的时间,与进程的开始时间无关。
进程的年龄:人类可读的形式
ps -p 1234 -o etime -h
1-02:03:04
Run Code Online (Sandbox Code Playgroud)
自 epoch 以来的第二个进程
stat --format=%Y /proc/1234
Run Code Online (Sandbox Code Playgroud)
秒龄
expr $(date +%s) - $(stat --format=%Y /proc/1234)
Run Code Online (Sandbox Code Playgroud)
额外的资源ps(1)
,stat(1)
归档时间: |
|
查看次数: |
14697 次 |
最近记录: |