GNU/Linux >> Linux Esercitazione >  >> Linux

Ottenere il tempo dell'utente e del kernel di un processo in esecuzione?

C'è un modo per determinare utilizzando gli strumenti standard di Linux/Unix quanto è stato speso un processo in modalità Utente e quanto è stato atteso il kernel?

In altre parole, esattamente i valori "user" e "sys" che ottieni quando usi time , ma durante tempo di esecuzione del processo?

NOTA: un modo è usare WBEM ed enumerare Linux_UnixProcess, ma devo usare altro strumento di questo; il mio obiettivo è verificare cosa mi dice il provider WBEM, ovvero devo usare uno strumento diverso.

Risposta accettata:

Su Linux, le informazioni sono disponibili nei campi da 14 a 17 di /proc/$pid/stat (vedi proc(5) per i dettagli):

I campi sono:

  • 14:tempo utente (in numero di tick dell'orologio)
  • 15:ora di sistema
  • 16:tempo utente di attesa per i bambini
  • 17:sys tempo di attesa per i bambini

(tutti i thread di un determinato processo hanno gli stessi valori lì)

Non vengono segnalati direttamente da ps .

ps segnala 14 + 15 con ps -o time e 14 + 15 + 16 + 17 con ps --cumulative -o bsdtime .

Attenzione che il secondo campo in /proc/$pid/stat può contenere spazi o caratteri di nuova riga, quindi non puoi analizzarlo con $1 di awk , $2

Puoi usare perl come:

$ perl -MPOSIX -l -0777 -ne '@f = /(.*)|S+/gs;
    printf "utime: %.2fnstime: %.2fncutime: %.2fncstime: %.2fn",
      map {$_/POSIX::sysconf( &POSIX::_SC_CLK_TCK )}@f[13..16]' "/proc/$pid/stat"
utime: 3.79
stime: 2.06
cutime: 56.49
cstime: 34.27

Un processo può recuperare i propri tempi con getrusage(RUSAGE_SELF) e getrusage(RUSAGE_CHILDREN) .

C'è anche un times chiamata di sistema che recupera le stesse informazioni. Le shell POSIX hanno un times costruito per quello. Alcune shell forniscono anche queste informazioni con time (senza argomenti).

$ times
0m3.800s 0m2.060s
0m56.512s 0m34.276s

$ ps -o time -p "$$"
    TIME
00:00:05
$ ps --cumulative -o bsdtime -p "$$"
  TIME
  1:36

Linux
  1. Linux:differenza tra spazio utente e spazio kernel?

  2. Linux:come ottenere l'ora dell'orologio da parete di un processo in esecuzione?

  3. Eseguire uno script ogni volta che viene installato un nuovo kernel?

  4. Stati del processo Linux

  5. stack del kernel e stack dello spazio utente

Kernel Linux e le sue funzioni

Come trovare e uccidere i processi in esecuzione in Linux

Processi in esecuzione

Qual è la differenza tra spazio utente e spazio kernel?

Come posso ottenere l'ora dell'orologio da parete di un processo in esecuzione?

Con quale utente dovrebbero essere eseguiti NGinx e PHP?