Bashプロンプトから長時間実行されるプロセスを実行しました。後から考えて、私はtime
を実行するか、開始した時刻を書き留めておきます。
この情報を遡及的に取得する方法はありますか? .bash_history
タイムスタンプが含まれていないようです。
私の特定のケースではMacOS Xですが、一般的なUnix/Linuxソリューションに興味があります。
明確にするために、これでプロセスは完了しました。絶対に必要な場合を除いて、再度実行しないことをお勧めします。
bash
は、シェルを閉じるまでの時間を実際に記憶しています。
だから走ってみてください
HISTTIMEFORMAT='%x %X ' history
あなたも置くなら
HISTTIMEFORMAT=<some format>
~/.bashrc
では、終了時に~/.bash_history
にも書き込まれるため、以前のシェルセッションで何が起こったかを確認することもできます。
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 プロンプトについては、シェルのマニュアルページをお読みください。
注:高精度が必要な場合、またはプログラムが前のプロンプトを表示できないほど多くの出力を生成する場合、これはおそらく役に立ちません。
プロセスがまだ実行中の場合は、ps
を使用して、プロセスが開始された時間と、プロセスが使用したCPU時間を取得できます。
たとえば、すべてのプロセスの場合:
ps -eo cputime,start,pid,command,args
特定のpid(12345)の場合:
ps -p 12345 -o cputime,start,pid,command,args
lastcomm(BSDプロセスアカウンティングが有効になっている場合)は、実行期間を提供します(適切な場合とそうでない場合がある限られた意味で)。