Localizando o tempo de execução do comando em retrospectiva

22

Acabei de executar um processo de longa execução no prompt do bash. Em retrospectiva, eu gostaria de ter corrido time, ou anotado o horário em que o iniciei.

Existe alguma maneira de obter essas informações retrospectivamente? A .bash_historynão parece incluem timestamps.

No meu caso particular, é o Mac OS X, mas estou interessado em soluções gerais para Unix / Linux.

Para esclarecer, o processo foi concluído e eu prefiro não executá-lo novamente, a menos que seja absolutamente necessário!

Graham Borland
fonte
Também sempre me esqueci disso e configurei meu prompt para exibir a hora.
math

Respostas:

23

bash na verdade lembra os tempos até você fechar o shell.

Então tente correr

HISTTIMEFORMAT='%x %X ' history

Se você também colocar

HISTTIMEFORMAT=<some format>

no seu ~/.bashrc, ele também será gravado ~/.bash_historyna saída, para que você possa verificar o que aconteceu nas sessões anteriores do shell.

Mikel
fonte
Mike incrível, nem achava que isso era possível.
Tim
9

A resposta de Mikel é boa, exceto que se você executar o programa e se afastar por um tempo, não poderá ter certeza de quando o processo foi concluído. Portanto, mesmo se você tiver tempo para iniciar o programa, não saberá quanto tempo levou.

Não tenho uma solução para o caso, quando você precisa descobrir sem preparação. No entanto, se você fizer isso novamente, poderá fazer como eu: imprima a hora atual junto com o prompt do shell. Dessa forma, se você ainda tiver o terminal aberto, poderá ver a hora em que iniciou o programa e a hora em que o próximo prompt será impresso. Um pouco de matemática lhe dará o tempo de execução.

Para fazer isso bash, coloque isso no seu .bashrc:

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

Em zsh, coloque isso em seu .zshrc:

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

O texto acima dará ao seu prompt de shell um formato de <time> <username>@<hostname> <current dir> <$ or % or #>. Para conchas diferentes e avisos extravagantes malucos , leia a página de manual do seu shell.

Nota: isso provavelmente não ajudará se você precisar de alta precisão ou se o programa produz tanta saída que você não consegue ver o prompt anterior.

phunehehe
fonte
2
Incluo um carimbo de data e hora no prompt do shell por esse motivo, mas lembre-se de que a hora mostrada no prompt é quando o prompt foi impresso, o que pode ser bem diferente do momento em que você realmente digitou e pressionou enter para iniciar o comando. Em outras palavras, lembre-se de levar em consideração o "tempo ocioso imediato".
Jw013 3/08
5

Se o processo ainda estiver em execução, você poderá usar pso tempo para iniciar e quanto tempo de CPU foi usado.

Por exemplo, para todos os processos:

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

Para um pid específico (12345):

ps -p 12345 -o cputime,start,pid,command,args
jsbillings
fonte
Obrigado, mas o processo já foi concluído. Vou ter isso em mente se executar novamente.
Graham Borland
Estou usando o GNU psno linux, o psno MacOSX pode ser BSD e não tenho certeza dos argumentos.
Jsbillings
Além disso, mantenha em mente que o tempo de CPU não é "tempo real"
Juan
4

lastcomm (se a contabilidade do processo BSD estiver ativada) fornecerá a duração da execução (em um sentido limitado que pode ou não ser adequado).

Martin Keegan
fonte