Trovare il tempo di esecuzione del comando con il senno di poi


22

Ho appena eseguito un processo di lunga durata dal prompt di bash. Con il senno di poi, vorrei correre timesu di esso, o annotare il momento in cui l'ho dato il via.

C'è un modo per ottenere queste informazioni in modo retrospettivo? Il .bash_historynon sembra includere i timestamp.

Nel mio caso particolare è Mac OS X, ma sono interessato alle soluzioni generali Unix / Linux.

Per chiarire, il processo è ora completato e preferirei non eseguirlo di nuovo a meno che non sia assolutamente necessario!


Ho anche sempre dimenticato questo e ho configurato il mio prompt per visualizzare l'ora.
matematica,

Risposte:


23

bash in realtà ricorda i tempi fino a quando non si chiude la shell.

Quindi prova a correre

HISTTIMEFORMAT='%x %X ' history

Se lo metti anche tu

HISTTIMEFORMAT=<some format>

nel tuo ~/.bashrc, verrà anche scritto ~/.bash_historysu all'uscita, quindi puoi controllare cosa è successo anche nelle precedenti sessioni di shell.


Fantastico Mike, non pensavo nemmeno che fosse possibile.
Tim

9

La risposta di Mikel è buona, tranne per il fatto che se si esegue il programma e se ne va per un po ', non si può essere davvero sicuri al termine del processo. Quindi, anche se hai il tempo quando hai avviato il programma, non sai quanto tempo ci è voluto.

Non ho una soluzione per il caso in cui è necessario scoprirlo senza preparazione. Tuttavia, se hai intenzione di farlo di nuovo, puoi fare come me: stampare l'ora corrente insieme al prompt della shell. In questo modo, se il terminale è ancora aperto, è possibile vedere l'ora in cui è stato avviato il programma e l'ora in cui viene stampato il prompt successivo. Un po 'di matematica ti darà il tempo di esecuzione.

Per fare questo bash, inseriscilo nel tuo .bashrc:

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

In zsh, inseriscilo nel tuo .zshrc:

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

Quanto sopra darà al tuo prompt della shell un formato di <time> <username>@<hostname> <current dir> <$ or % or #>. Per diversi conchiglie e folli fantasia istruzioni, consultate la pagina man della tua shell.

Nota: questo probabilmente non aiuterà se hai bisogno di alta precisione o se il programma produce così tanto output che non riesci a vedere il prompt precedente.


2
Includo un timestamp nel mio prompt della shell per questo motivo, ma attenzione che l'ora mostrata nel prompt è quando il prompt è stato stampato, che potrebbe essere molto diverso dal momento in cui hai effettivamente finito di digitare e premere invio per avviare il comando. In altre parole, ricordati di considerare te stesso il "tempo di inattività".
jw013,

5

Se il processo è ancora in esecuzione, è possibile utilizzare psper ottenere il tempo di avvio e la quantità di tempo della CPU utilizzata.

Ad esempio, per tutti i processi:

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

Per un particolare pid (12345):

ps -p 12345 -o cputime,start,pid,command,args

Grazie, ma il processo è già stato completato. Lo terrò a mente se lo eseguo di nuovo.
Graham Borland,

Sto usando GNU psin Linux, il psin MacOSX potrebbe essere BSD e non sono sicuro degli argomenti.
jsbillings,

Inoltre, tieni presente che il tempo della CPU non è "tempo reale"
Juan

4

lastcomm (se la contabilità del processo BSD è abilitata) fornirà la durata dell'esecuzione (in qualche modo limitata che può essere o non essere adeguata).

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.