Como verificar quanto tempo um processo foi executado depois de terminado?

11

Atualmente, estou usando o seguinte para verificar quanto tempo um processo está sendo executado:

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, depois que o processo termina, quero descobrir quanto tempo ele realmente correu, mas não consigo encontrar essa informação.

    
por Diego 19.05.2011 / 15:28

3 respostas

13

Não acho que seja possível obter essas informações depois que o processo já foi 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
    
por 19.05.2011 / 15:37
7

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

Se você precisar de tempo para um programa específico, invoque-o em time .

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

    
por 19.05.2011 / 22:21
1

Antes de ver as perguntas e suas respostas, fiz um pequeno script. Isto ainda é útil, se você não tem direitos de root e o acct não está instalado ou você não invoca seu comando diretamente (no meu caso: eu uso um gui para configurar processos em segundo plano). Você precisa obter o PID antes de executar (alguém interessado 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 o USER-ID e o PID para tornar o script não-ambíguo, mas não é assim tão fácil ... ps -eo uid,pid,etime | egrep '$UID[[:space:]]$PID' parece não funcionar sempre ...

    
por 01.09.2014 / 13:46

Tags