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

22

Acabei de executar um processo de longa duração a partir do prompt do bash. Em retrospectiva, gostaria de ter corrido time ou anotado o tempo em que eu comecei.

Existe alguma maneira de obter essas informações retrospectivamente? O .bash_history não parece incluir os timestamps.

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

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

    
por Graham Borland 03.08.2012 / 17:40

4 respostas

23

bash realmente lembra os horários até você fechar o shell.

Então, tente executar

HISTTIMEFORMAT='%x %X ' history

Se você também colocar

HISTTIMEFORMAT=<some format>

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

    
por 03.08.2012 / 17:47
9

A resposta de Mikel é boa, exceto que, se você executar o programa e for embora por um tempo, não poderá ter certeza de quando o processo foi concluído. Então, mesmo se você tiver o tempo quando você começou o programa, você não sabe quanto tempo demorou.

Eu não tenho uma solução para o caso quando você precisa descobrir sem preparação. No entanto, se você for fazer isso novamente, você pode 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 vai te dar o tempo de execução.

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

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

Em zsh , coloque isso no seu .zshrc :

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

O acima fornecerá ao seu prompt do shell um formato de <time> <username>@<hostname> <current dir> <$ or % or #> . Para diferentes shells e louco fancy solicita, 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 produzir tanta saída que você não conseguir ver o prompt anterior.

    
por 03.08.2012 / 18:25
5

Se o processo ainda estiver em execução, você pode usar ps para obter o tempo de inicialização e quanto tempo de CPU ele usou.

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
    
por 03.08.2012 / 17:47
4

lastcomm (se a contabilidade do processo BSD estiver habilitada) lhe dará a duração da execução (em algum sentido limitado que pode ou não ser adequado).

    
por 04.08.2012 / 00:00