現在、プロセスが実際に実行された時間を確認するために、次のコマンドを使用しています。
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'
常に動作するわけではありません...