ps start_time作为时间戳

时间:2016-11-13 01:54:14

标签: linux shell awk ps

我目前正在使用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'

谢谢!

1 个答案:

答案 0 :(得分:3)

使用etimes选项(自启动进程以来经过的时间,以秒为单位)和awk的{​​{1}}函数,以秒为单位返回当前时间戳。

假设第7列是systime(),那么AWK表达式应如下所示:

etimes

示例:

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

示例输出

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

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