有没有命令可以显示运行长进程时经过的时间?

有没有命令可以显示运行长进程时经过的时间?

比如说,如果我们运行一些长命令,例如网站的功能测试,是否有一个命令,例如:

elapsed npm test

其中npm test是可能包含多个不同命令的进程或 shell 脚本,可能需要 45 分钟。如果在运行过​​程中,能够每分钟或者每5分钟打印出“22分钟已过去”就太好了。

该命令time可以显示所花费的总时间,但不能显示一路上经过的时间。

答案1

你可以使用pv -t

npm test | pv -t

或者为了避免npm的输出经过,请使用不写入的pvfd :npm

{ npm test 3>&1 >&4 4>&- | pv -t; } 4>&1

答案2

在后台启动该命令并每分钟轮询其消耗的 CPU 时间:

npm test &
while sleep 1m
do
    ps -o etime $!
done

答案3

沿着l0b0 的回答:将作业放在后台,然后围绕“它还在运行吗?”这个问题运行一个繁忙循环,并沿途发出经过的分钟数:

过去

#!/bin/sh
start=$(date +%s)
"$@" &
while ps -p $! > /dev/null
do
  sleep 1
  now=$(date +%s)
  if [ $(( (now - start) % 60)) -eq 0 ]
  then
    printf "%d minutes have elapsed\n" $(( (now - start) / 60))
  fi
done

如果我们的进程结束而另一个进程在我们睡眠时开始,则这会带来另一个进程重复使用与我们的后台进程相同的 PID 的风险。

每隔一分钟报告经过的分钟数5分钟而不是每分钟,只需更改第一个60到一个300

相关内容