GNU/Linux >> Linux Esercitazione >  >> Linux

Come calcolare l'utilizzo della CPU di un processo tramite PID in Linux da C?

Devi analizzare i dati da /proc/<PID>/stat . Questi sono i primi campi (da Documentation/filesystems/proc.txt nel sorgente del kernel):

Table 1-3: Contents of the stat files (as of 2.6.22-rc3)
..............................................................................
 Field          Content
  pid           process id
  tcomm         filename of the executable
  state         state (R is running, S is sleeping, D is sleeping in an
                uninterruptible wait, Z is zombie, T is traced or stopped)
  ppid          process id of the parent process
  pgrp          pgrp of the process
  sid           session id
  tty_nr        tty the process uses
  tty_pgrp      pgrp of the tty
  flags         task flags
  min_flt       number of minor faults
  cmin_flt      number of minor faults with child's
  maj_flt       number of major faults
  cmaj_flt      number of major faults with child's
  utime         user mode jiffies
  stime         kernel mode jiffies
  cutime        user mode jiffies with child's
  cstime        kernel mode jiffies with child's

Probabilmente stai cercando utime e/o stime . Dovrai anche leggere il cpu riga da /proc/stat , che assomiglia a:

cpu  192369 7119 480152 122044337 14142 9937 26747 0 0

Questo ti dice il tempo cumulativo della CPU che è stato utilizzato in varie categorie, in unità di jiffies. Devi prendere la somma dei valori su questa riga per ottenere un time_total misura.

Leggi entrambi utime e stime per il processo che ti interessa e leggi time_total da /proc/stat . Quindi dormi per un secondo o giù di lì e rileggili tutti di nuovo. Ora puoi calcolare l'utilizzo della CPU del processo durante il tempo di campionamento, con:

user_util = 100 * (utime_after - utime_before) / (time_total_after - time_total_before);
sys_util = 100 * (stime_after - stime_before) / (time_total_after - time_total_before);

Ha senso?


getrusage() può aiutarti a determinare l'utilizzo del processo corrente o del suo figlio

Aggiornamento: Non ricordo un'API. Ma tutti i dettagli saranno in /proc/PID /stat, quindi se potessimo analizzarlo, potremmo ottenere la percentuale.

MODIFICA: Poiché la percentuale di CPU non è semplice da calcolare, è possibile utilizzare il campionamento di cose qui. Leggi ctime e utime per un PID in un determinato momento e rileggi gli stessi valori dopo 1 sec. Trova la differenza e dividi per cento. Otterrai l'utilizzo per quel processo per oltre un secondo.

(potrebbe diventare più complesso se ci sono molti processori)


Linux
  1. Come limitare l'utilizzo della CPU di un processo in Linux

  2. Linux:come leggere da /proc/$pid/mem sotto Linux?

  3. Come impostare l'affinità della CPU per un processo da C o C++ in Linux?

  4. Come ottenere il PID padre di un determinato processo in GNU/Linux dalla riga di comando?

  5. Linux:visualizza l'utilizzo della CPU da parte di un processo per l'ultimo secondo

Come visualizzare l'utilizzo della CPU dalla riga di comando

Come modificare la priorità di un processo in Linux

Come ottenere l'utilizzo della CPU di un singolo processo in Linux

Come trovare il PID e il PPID di un processo in Linux

Come controllare l'utilizzo o l'utilizzo della CPU di Linux

Come posso ottenere l'utilizzo totale della CPU di un'applicazione da /proc/pid/stat?