プログラムの睡眠時間を取得する方法

プログラムの睡眠時間を取得する方法

毎日実行しているスクリプトの統計を収集しようとしています。実際に睡眠に費やした時間がどれくらいになるのか知りたいです。すべての睡眠サイクルの合計を取得する方法はありますか?たとえば、

#some task
sleep 5
#some task
sleep 2

結果は7になってほしいです。スクリプトには、複数のループと条件を含む多くのファイルが含まれています。このソリューションを使用するには、スクリプトを実行して、実際に睡眠がどのように呼び出されているのか、何回の呼び出しを確認する必要があります。

答え1

速くて汚い答えはgrepとawkを使って追加することです。

grep -o 'sleep [0-9]\+' input.sh | awk '{ sum +=$2 } END { print sum }'

これはgrep「input.sh」を検索することを意味します。各行には、-oその行の一致する部分だけを印刷します()。一致は、sleep文字列の後に0から9までの数字が1つ以上続く必要があります。これで印刷する内容ができました。

sleep 5
sleep 2

このリストをここに送信し、awk行ごとに処理してから、2番目の列をすべて合計します。最後に合計を出力します。

注:これはやや脆弱なソリューションです。たとえば、コメント付きの行がある場合:

# we used to do sleep 1000 here by it was too slow

合計には引き続き含まれます。スクリプトについてもっと知ると、より強力なパイプラインを作成できます。たとえば、sleep呼び出しが常に行の先頭にあることがわかっている場合は、grepをアンカーできます。

grep -o '^sleep [0-9]\+' | ...

そして、睡眠時間が多く含まれているスクリプトも疑わしいです。オートメーションを構成するより良い方法はほとんど常に存在し、スリープモードはほとんどテストにのみ役立ちます。

関連情報