Come verificare per quanto tempo è terminato un processo dopo il completamento?


13

Attualmente sto usando quanto segue per verificare per quanto tempo è effettivamente in esecuzione un processo:

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

E questo genera quanto segue:

MY_ID PID_OF_PROCESS       00:16

Tuttavia, una volta terminato il processo, voglio scoprire per quanto tempo è stato effettivamente eseguito, ma non riesco a trovare tali informazioni.

Risposte:


14

Non penso che sia possibile ottenere tali informazioni dopo che il processo è già terminato.

Se sai in anticipo che avrai bisogno di tali informazioni, puoi eseguire il comando come

time <command>

per esempio

~> time sleep 1

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

7

Controlla se la tua variante unix supporta la contabilità di processo . Ad esempio, su Ubuntu (e la maggior parte delle altre distribuzioni Linux), questo è fornito dal acctpacchetto Installa acct http://bit.ly/software-small . Se il sottosistema di contabilità è attivo e funzionante, lastcommmostra le informazioni sui processi finiti, incluso il tempo impiegato dal processore (il tempo dell'orologio a muro non sta registrando).

Se hai bisogno di tempistiche per un programma specifico, invocalo attraversotime .

Se hai bisogno di informazioni più precise, usa un pacchetto di auditing più elaborato, ad esempio il sottosistema di audit in Linux.


Questa risposta ha perso la sua immagine.
Mattdm,

@mattdm Oh, è il legame che era di serie su Ask Ubuntu per il collegamento a apt.ubuntu.com, e quindi l'immagine ottenuto eliminata dalla Imgur. Devo averlo usato centinaia di volte su SE e non mi piace la prospettiva di modificarli tutti. Sto ancora aspettando che SE effettui una sostituzione automatica, cosa che non faranno poiché non l'hanno nemmeno fatto quando tutta la documentazione Java è stata spostata.
Gilles 'SO- smetti di essere malvagio'

1

Prima di vedere queste domande e le sue risposte, ho realizzato un piccolo script bash. Ciò è ancora utile, se non si dispone dei diritti di root e acct non è installato o non si richiama direttamente il comando (nel mio caso: utilizzo una GUI per impostare i processi in background). È necessario ottenere il PID prima di eseguire (qualcuno è interessato ad aggiungerlo nello 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

Con questo, trova il PID di PROCESS_NAME

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

In realtà ho provato a combinare USER-ID e PID per rendere la sceneggiatura non ambigua, ma non è così facile ... ps -eo uid,pid,etime | egrep '$UID[[:space:]]$PID'non sembra funzionare sempre ...


Proprio quello di cui avevo bisogno! Ho scoperto che su Centos 6.8 avevo bisogno di omettere le virgolette intorno a '$ PID' e saltare egrep '$UID'come sono l'unico utente in questo modo:ps -eo uid,pid,etime | egrep $PID
Chris Adams,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.