長いプロセスの実行中に経過時間を表示するコマンドはありますか?

長いプロセスの実行中に経過時間を表示するコマンドはありますか?

たとえば、Webサイトの機能テストなどの長いコマンドを実行している場合、次のコマンドはありますか?

elapsed npm test

これはnpm test複数のコマンドを含むプロセスまたはシェルスクリプトで、最大45分かかることがあります。実行中に1分ごとまたは5分ごとに「22分経過」を出力できれば良いようです。

このコマンドはtime費やされた合計時間を表示できますが、途中で経過した時間は表示できません。

答え1

あなたが使用できるpv -t

npm test | pv -t

あるいは、出力の通過を防ぐには、書き込みnpmではなくpvfdを使用してください。npm

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

答え2

バックグラウンドでこのコマンドを開始し、1分ごとに消費された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を再利用するリスクが発生します。

1分ごとの経過時間(分)報告5毎分の代わりに最初の分だけを変更してください。60300

関連情報