プロセスが終了してからどれくらいの時間実行されたかを確認するには


13

現在、以下を使用して、プロセスが実際に実行されている時間を確認しています。

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

そして、それは次を出力します:

MY_ID PID_OF_PROCESS       00:16

ただし、プロセスが終了した後、実際に実行された期間を調べたいのですが、その情報が見つからないようです。

回答:


14

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

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

time <command>

例えば

~> time sleep 1

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

7

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

特定のプログラムのタイミングが必要な場合は、を介して呼び出しtimeます。

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


この答えはそのイメージを失いました。
mattdm

@mattdmああ、それは、UbuntuにリンクするためにAsk Ubuntuで標準であったリンクで、その後、イメージはimgurから削除されました。私はそれをSEで何百回も使用したはずであり、それらをすべて編集する見込みはありません。私はまだ、SEが自動置換を行っていることを主張していますが、すべてのJava文書が移動したときにも、SEがそれを行わなかったので、SEはそれを行いません。apt.ubuntu.com
ジル 'SO-悪であるのをやめる'

1

この質問とその答えを見る前に、少し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'しないようにしましたが、それほど簡単で はありません...常に機能するとは限りません...


ちょうど私が必要なもの!私はCentOSに6.8に私は「$ PID」の前後に引用符を省略するために必要なことが判明し、スキップegrep '$UID'、私はそうのようなユーザーだけだとして:ps -eo uid,pid,etime | egrep $PID
クリス・アダムス
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.