事后查找命令执行时间

事后查找命令执行时间

我刚刚从 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 进程记帐)将为您提供执行持续时间(在某种有限的意义上,这可能足够也可能不足够)。

相关内容