プロセスが完了した後に実行にかかった時間を確認するには?

プロセスが完了した後に実行にかかった時間を確認するには?

現在、プロセスが実際に実行された時間を確認するために、次のコマンドを使用しています。

ps -eo uid,pid,etime | egrep '^ *MY_ID' | egrep 'PID_OF_PROCESS'

出力は次のとおりです。

MY_ID PID_OF_PROCESS       00:16

ところで、プロセスが終わってから実際に実行するのにどれくらい時間がかかったのか知りたいのですが、その情報が見つからないようです。

答え1

プロセスが完了したら、そのような情報を取得することは不可能だと思います。

この情報が必要であることを事前に知っている場合は、次のコマンドを実行できます。

time <command>

例えば

~> time sleep 1

real        0m1.003s
user        0m0.002s
sys         0m0.001s

答え2

Unixバージョンがそれをサポートしていることを確認してください。プロセス会計。たとえば、Ubuntu(および他のほとんどのLinuxディストリビューション)では、次のようになります。acctパック アカウントのインストール http://bit.ly/software-small。会計サブシステムが稼働している場合lastcomm使用されたプロセッサ時間を含む完了したプロセスに関する情報を表示します(壁掛け時間は記録されません)。

特定のプログラムのタイミングが必要な場合、それを呼び出してtime

より正確な情報が必要な場合は、高度な監査パッケージを使用してください。監査サブシステムLinuxで。

答え3

この質問と回答を見る前に、私は小さなbashスクリプトを作成しました。これは、rootアクセス権がなく、acctがインストールされていない場合、またはコマンドを直接呼び出さない場合でもまだ便利です(私の場合は、GUIを使用してバックグラウンドプロセスを設定しました)。実行する前にPIDを取得する必要があります。 (これをスクリプトに追加することに興味がある人はいますか?:)

#!/bin/bash

echo "Checking run time"
read -p "What is the pid? " PID

while true; do
    # sleep needed! used to reduce cpu usage and mass of output
    sleep 5
    ps -eo uid,pid,etime | egrep '$PID' | egrep '$UID'
done

このようにして、PROCESS_NAMEのPIDを見つけます。

ps aux | awk 'NR == 1 || /PROCESS_NAME/'

実際、スクリプトを明示的にするためにUSER-IDとPIDを組み合わせてみましたが、それは簡単ではありません... ps -eo uid,pid,etime | egrep '$UID[[:space:]]$PID'常に動作するわけではありません...

関連情報