GNU/Linux >> Tutoriels Linux >  >> Linux

Comment calculer l'utilisation CPU d'un processus par PID sous Linux à partir de C ?

Vous devez analyser les données de /proc/<PID>/stat . Ce sont les premiers champs (à partir de Documentation/filesystems/proc.txt dans les sources de votre noyau) :

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

Vous êtes probablement après utime et/ou stime . Vous devrez également lire le cpu ligne de /proc/stat , qui ressemble à :

cpu  192369 7119 480152 122044337 14142 9937 26747 0 0

Cela vous indique le temps CPU cumulé qui a été utilisé dans diverses catégories, en unités de jiffies. Vous devez prendre la somme des valeurs sur cette ligne pour obtenir un time_total mesurer.

Lire les deux utime et stime pour le processus qui vous intéresse, et lisez time_total à partir de /proc/stat . Ensuite, dormez une seconde environ et lisez-les tous à nouveau. Vous pouvez maintenant calculer l'utilisation CPU du processus sur la durée d'échantillonnage, avec :

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);

Ça a du sens ?


getrusage() peut vous aider à déterminer l'utilisation du processus actuel ou de son enfant

Mise à jour : Je ne me souviens pas d'une API. Mais tous les détails seront dans /proc/PID /stat, donc si nous pouvions l'analyser, nous pouvons obtenir le pourcentage.

MODIF : Étant donné que le pourcentage de CPU n'est pas simple à calculer, vous pouvez utiliser ici un type d'échantillonnage. Lire ctime et utime pour un PID à un moment donné et relire les mêmes valeurs après 1 sec. Trouvez la différence et divisez par cent. Vous obtiendrez une utilisation de ce processus pendant une seconde.

(peut devenir plus complexe s'il y a plusieurs processeurs)


Linux
  1. Comment limiter l'utilisation du processeur d'un processus sous Linux

  2. Comment rechercher sur le Web à partir d'un terminal sous Linux

  3. Linux – Comment lire depuis /proc/$pid/mem sous Linux ?

  4. Comment définir l'affinité CPU pour un processus à partir de C ou C++ sous Linux ?

  5. Comment obtenir le chemin d'un processus sous Unix / Linux

Comment afficher l'utilisation du processeur à partir de la ligne de commande

Comment changer la priorité d'un processus sous Linux

Comment obtenir l'utilisation du processeur d'un seul processus sous Linux

Comment trouver le PID et le PPID d'un processus sous Linux

Comment vérifier l'utilisation ou l'utilisation du processeur Linux

Comment puis-je obtenir l'utilisation totale du processeur d'une application à partir de /proc/pid/stat ?