【问题标题】:Can one do date math with ps output?可以用 ps 输出做日期数学吗?
【发布时间】:2017-07-18 17:08:49
【问题描述】:

如果我运行这个命令

ps aux | grep -ie ff1 | awk '{print $2 , $9 , $(NF-0)}'

我得到了这个结果:

7019 12:33 /var/www/html/tv1/video1.m3u8
13374 17:13 /var/www/html/tv1/asdas.m3u8
15001 05:58 /var/www/html/tv1/dfwef.m3u8
15021 05:58 /var/www/html/tv1/werwe.m3u8
15200 11:45 /var/www/html/tv1/2fsdfsf.m3u8

所以每行中的第二个单词是进程开始的时间 那么有没有办法我可以用

计算那个时间
date +%H:%M   - awk '{print $9}' 

这样我就可以知道每个进程运行了多少时间


我想要这样的结果:

02:20 7019 12:33 /var/www/html/tv1/video1.m3u8

(表示从 12:33 开始的进程 7019 已经运行了 2 小时 20 分钟)

【问题讨论】:

  • 就个人而言,我根本不会使用ps,而是直接从procfs中提取纪元时间;从当前纪元时间中减去,您就有了运行时的秒数。
  • ...当您遇到极端情况时,例如脚本在午夜之后运行且进程在该边界之前启动的情况,纪元时间也相当不容易出现错误。
  • 可能需要这样的东西: ps -o etime= -p "PID NUMBER example awk '{print $2 "
  • @arpak:不要使用 awk 来解析输出。使用ps-o 标志以正确的顺序准确请求所需的字段。

标签: linux bash unix


【解决方案1】:

您可以使用以下命令。第一个给出特定的 PID,第二个给出所有进程。

ps -o etime= -p <PID>

ps -eo pid,etime

【讨论】:

  • 如何在我的 ps aux | 中实现这个命令grep -ie ff1 | awk '{打印 $2 , $9 , $(NF-0)}'
  • stackoverflow.com/questions/14652445/… 结合可能会转换为秒数:-)
  • ps 辅助 | grep -ie ff1 | awk '{打印 $2 , $9 , $(NF-0)}' | ps -o etime= -p 有可能吗?
【解决方案2】:

这应该给出您想要的 - 经过时间、PID 和开始时间:

$ ps -o etime,pid,bsdstart,cmd
    ELAPSED   PID  START CMD
      00:05 25980  18:33 bash
      00:00 26019  18:33 ps -o etime,pid,bsdstart,cmd

(我第二次告诉@CharlesDuffy's sentiment,你绝对应该尝试解析这个输出。)

【讨论】:

  • 如何在我的命令中实现ps aux | grep -ie ff1 | awk '{打印 $2 , $9 , $(NF-0)}'
  • 你是什么意思,@arpak?
  • 我需要得到这样的结果:02:20 7019 12:33 /var/www/html/tv1/video1.m3u8(这意味着从 12:33 开始的进程 7019 已经运行2小时20分钟)
  • 我在等它
  • 看你不懂我的意思。我怎么能在那里添加/var/www/html/tv1/video1.m3u8,????您必须在我的命令中添加一些内容,以便它显示现在显示的所有结果。加上时差
猜你喜欢
  • 1970-01-01
  • 2017-09-13
  • 2017-01-08
  • 2011-10-28
  • 1970-01-01
  • 2012-08-10
  • 1970-01-01
  • 1970-01-01
  • 2013-03-12
相关资源
最近更新 更多