web-dev-qa-db-ja.com

後からコマンド実行時間を見つける

Bashプロンプトから長時間実行されるプロセスを実行しました。後から考えて、私はtimeを実行するか、開始した時刻を書き留めておきます。

この情報を遡及的に取得する方法はありますか? .bash_historyタイムスタンプが含まれていないようです。

私の特定のケースではMacOS Xですが、一般的なUnix/Linuxソリューションに興味があります。

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

22
Graham Borland

bashは、シェルを閉じるまでの時間を実際に記憶しています。

だから走ってみてください

HISTTIMEFORMAT='%x %X ' history

あなたも置くなら

HISTTIMEFORMAT=<some format>

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

23
Mikel

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 #>の形式を与えます。さまざまなシェルと crazyfancy プロンプトについては、シェルのマニュアルページをお読みください。

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

9
phunehehe

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

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

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

特定のpid(12345)の場合:

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

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

4
Martin Keegan