gpt4 book ai didi

linux - ps start_time 作为时间戳

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:06:09 36 4
gpt4 key购买 nike

我目前正在使用 ps 命令来监控一些进程。但是,我希望将时间输出为 Unix 时间戳。

我正在使用的命令:

ps -eo class,s,user,pid,pcpu,stat,start_time,cputime,args --sort=class | \
awk '$1 != "RR" && $1 != "FF" {print $0; next } 0'

谢谢!

最佳答案

使用 etimes 选项(自进程启动以来耗时,以秒为单位)和 awksystime() 函数返回当前时间戳,以秒为单位。

假设第 7 列是 etimes,那么 AWK 表达式应该如下所示:

NR == 1 ? "TIMESTAMP" : systime() - $7

例子:

ps -eo class,s,user,pid,pcpu,stat,etimes,cputime,args --sort=class | awk \
'$1 != "RR" && $1 != "FF" {print $0, NR == 1 ? "TIMESTAMP" : systime() - $7 }'

示例输出

CLS S USER       PID %CPU STAT ELAPSED     TIME COMMAND TIMESTAMP
TS S root 1 0.0 Ss 1717 00:00:01 init [3] 1479001705
TS S root 2 0.0 S 1717 00:00:00 [kthreadd] 1479001705
TS S root 3 0.0 S 1717 00:00:00 [ksoftirqd/0] 1479001705

如果你想替换第七列,你可以覆盖$7变量:$7 = systime() - $7

如果应该进一步解析命令的结果,我会使用 --no-headers 选项删除 header ,例如:

ps --no-headers -eo class,s,user,pid,pcpu,stat,etimes,cputime,args \
--sort=class | awk '$1 != "RR" && $1 != "FF" { $7 = systime() - $7; print }'

示例输出

TS S root 1 0.0 Ss 1479001705 00:00:01 init [3]
TS S root 2 0.0 S 1479001705 00:00:00 [kthreadd]
TS S root 3 0.0 S 1479001705 00:00:00 [ksoftirqd/0]

请注意,不需要 next脚本中的语句,因为它的目的是立即停止处理当前记录并继续处理下一条记录,并且在脚本末尾没有要跳过的语句(模式- Action 对)。

关于linux - ps start_time 作为时间戳,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40569736/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com