後知恵でコマンド実行時間を見つける


22

bashプロンプトから実行時間の長いプロセスを実行しました。後知恵で、私timeはそれを実行したい、または私がそれを開始した時間を書き留めたいと思います。

この情報を遡及的に取得する方法はありますか?.bash_historyタイムスタンプを含めるようには見えません。

私の場合はMac OS Xですが、一般的なUnix / Linuxソリューションに興味があります。

明確にするために、プロセスは完了しました。どうしても必要な場合を除き、再度実行しないことをお勧めします。


また、私はいつもこれを忘れており、時間を表示するようにプロンプ​​トを構成しました。
数学

回答:


23

bash 実際にシェルを閉じるまでの時間を覚えています。

だから実行してみてください

HISTTIMEFORMAT='%x %X ' history

あなたも入れたら

HISTTIMEFORMAT=<some format>

~/.bashrc、終了時にも書き込まれる~/.bash_historyので、以前のシェルセッションでも何が起こったかを確認できます。


素晴らしいマイク、これが可能だとさえ思わなかった。
ティム

9

Mikelの答えは良いです。ただし、プログラムを実行してしばらく離れると、いつプロセスが終了したのか本当に確信が持てません。そのため、プログラムを開始した時間があったとしても、どれだけ時間がかかったかわかりません。

準備なしで調べる必要がある場合の解決策はありません。しかし、あなたが再びそれをするつもりなら、あなたは私のようにすることができます:シェルプロンプトと一緒に現在の時間を印刷します。そうすれば、端末を開いたままにしておくと、プログラムを開始した時刻と、次のプロンプトが出力される時刻を確認できます。ちょっとした計算で実行時間を取得できます。

これを行うにはbash、次のように配置します.bashrc

export PS1="\A \u@\h \W \$ "

zsh、これをあなたの.zshrc

export PS1="%D{%H:%M} %n@%m %1~ %# "

上記はシェルプロンプトにのフォーマットを与えます<time> <username>@<hostname> <current dir> <$ or % or #>。さまざまなシェルとクレイジー なファンシープロンプトについては、シェルのマニュアルページを参照してください。

注:これはおそらく、高精度が必要な場合、またはプログラムが非常に多くの出力を生成して前のプロンプトが表示されない場合は役に立ちません。


2
この理由でシェルプロンプトにタイムスタンプを含めますが、プロンプトに表示される時刻はプロンプトが印刷された時刻であることに注意してください。これは、実際に入力してEnterキーを押してコマンドを開始した時刻とはかなり異なる場合があります。つまり、自分で「プロンプトアイドル時間」を考慮することを忘れないでください。
jw013

5

プロセスがまだ実行中の場合は、プロセスのps開始時間と使用したCPU時間を取得するために使用できます。

たとえば、すべてのプロセスの場合:

ps -eo cputime,start,pid,command,args

特定のPID(12345)の場合:

ps -p 12345 -o cputime,start,pid,command,args

感謝しますが、プロセスはすでに完了しています。もう一度実行する場合は、このことに留意してください。
グラハムボーランド

psLinuxでGNU を使用していますがps、MacOSX ではBSDである可能性があり、引数についてはわかりません。
jsbillings

また、CPU時間は「リアルタイム」ではないことに注意してください
フアン

4

lastcomm(BSDプロセスアカウンティングが有効になっている場合)は、実行時間を提供します(ある程度の意味では、適切である場合とそうでない場合があります)。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.