我刚刚从 bash 提示符执行了一个长时间运行的进程。事后看来,我希望我能继续执行time
它,或者记下我启动它的时间。
有什么办法可以回顾性地获取这些信息吗?似乎.bash_history
不包括时间戳。
在我的特定情况下,它是 Mac OS X,但我对通用 Unix/Linux 解决方案感兴趣。
澄清一下,该过程现已完成,除非绝对必要,否则我不想再次运行它!
答案1
bash
实际上会记住直到您关闭外壳为止的时间。
所以尝试运行
HISTTIMEFORMAT='%x %X ' history
如果你也把
HISTTIMEFORMAT=<some format>
在您的 中~/.bashrc
,它也会~/.bash_history
在退出时被写入,因此您也可以检查以前的 shell 会话中发生的情况。
答案2
米克尔的回答很好,但如果您运行该程序并离开一段时间,您就无法真正确定该过程何时完成。因此,即使您启动该程序时有时间,您也不知道花了多少时间。
当你在没有准备的情况下需要找出答案时,我没有解决方案。但是,如果您打算再次这样做,您可以像我一样:将当前时间与 shell 提示符一起打印。这样,如果您仍然打开终端,您可以看到启动程序的时间以及打印下一个提示的时间。稍微数学一下就能算出执行时间。
要执行此操作bash
,请将其放入您的.bashrc
:
export PS1="\A \u@\h \W \$ "
在 中zsh
,将其放入您的.zshrc
:
export PS1="%D{%H:%M} %n@%m %1~ %# "
上面的命令将为您的 shell 提示符提供以下格式<time> <username>@<hostname> <current dir> <$ or % or #>
.对于不同的外壳和疯狂的 想要提示时,请阅读 shell 的手册页。
注意:如果您需要高精度,或者程序产生太多输出以至于您看不到前面的提示,这可能不会有帮助。
答案3
如果进程仍在运行,您可以使用它ps
来获取其启动时间以及已使用的 CPU 时间。
例如,对于所有进程:
ps -eo cputime,start,pid,command,args
对于特定的 pid (12345):
ps -p 12345 -o cputime,start,pid,command,args
答案4
最后通讯(如果启用了 BSD 进程记帐)将为您提供执行持续时间(在某种有限的意义上,这可能足够也可能不足够)。