Como verificar quanto tempo um processo foi executado depois de concluído?


13

Atualmente, estou usando o seguinte para verificar quanto tempo um processo está em execução:

ps -eo uid,pid,etime | egrep '^ *MY_ID' | egrep 'PID_OF_PROCESS'

E isso gera o seguinte:

MY_ID PID_OF_PROCESS       00:16

No entanto, após o término do processo, quero descobrir por quanto tempo ele realmente foi executado, mas não consigo encontrar essas informações.

Respostas:


14

Não creio que seja possível obter essas informações depois que o processo já estiver concluído.

Se você souber de antemão que precisará dessas informações, poderá executar o comando como

time <command>

por exemplo

~> time sleep 1

real        0m1.003s
user        0m0.002s
sys         0m0.001s

7

Verifique se sua variante unix suporta contabilidade de processos . Por exemplo, no Ubuntu (e na maioria das outras distribuições Linux), isso é fornecido pelo acctpacote Install acct http://bit.ly/software-small . Se o subsistema de contabilidade estiver em funcionamento, lastcommmostrará informações sobre os processos concluídos, incluindo quanto tempo do processador eles usaram (o tempo do relógio de parede não está gravando).

Se você precisar de tempo para um programa específico, inicie-otime .

Se você precisar de informações mais precisas, use um pacote de auditoria mais sofisticado, por exemplo, o subsistema de auditoria no Linux.


Esta resposta perdeu sua imagem.
mattdm

@mattdm Oh, é o elo que era padrão em Ask Ubuntu para ligando para apt.ubuntu.com, em seguida, a imagem foi deletado de imgur. Devo tê-lo usado centenas de vezes no SE e não gosto da perspectiva de editá-los todos. Ainda estou esperando o SE fazer uma substituição automatizada, o que eles não farão, porque nem o fizeram quando toda a documentação do Java foi movida.
Gilles 'SO- stop be evil'

1

Antes de ver essas perguntas e suas respostas, fiz um pequeno script bash. Isso ainda é útil, se você não possui direitos de root e o acct não está instalado ou não invoca seu comando diretamente (no meu caso: eu uso uma GUI para configurar processos em segundo plano). Você precisa obter o PID antes da execução (qualquer pessoa interessada em adicioná-lo ao script? :)

#!/bin/bash

echo "Checking run time"
read -p "What is the pid? " PID

while true; do
    # sleep needed! used to reduce cpu usage and mass of output
    sleep 5
    ps -eo uid,pid,etime | egrep '$PID' | egrep '$UID'
done

Com isso, encontre o PID de PROCESS_NAME

ps aux | awk 'NR == 1 || /PROCESS_NAME/'

Na verdade, tentei combinar USER-ID e PID para tornar o script não ambicioso, mas não é tão fácil ... ps -eo uid,pid,etime | egrep '$UID[[:space:]]$PID'não parece funcionar sempre ...


Apenas o que eu precisava! Eu descobri que no Centos 6.8 eu precisava omitir as aspas em torno de '$ PID' e pular, egrep '$UID'pois sou o único usuário assim:ps -eo uid,pid,etime | egrep $PID
Chris Adams
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.