GNU/Linux >> Tutoriales Linux >  >> Linux

¿Cómo calcular el uso de CPU de un proceso por PID en Linux desde C?

Debe analizar los datos de /proc/<PID>/stat . Estos son los primeros campos (desde Documentation/filesystems/proc.txt en la fuente de su 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

Probablemente estés buscando utime y/o stime . También necesitarás leer el cpu línea desde /proc/stat , que se parece a:

cpu  192369 7119 480152 122044337 14142 9937 26747 0 0

Esto le indica el tiempo de CPU acumulado que se ha utilizado en varias categorías, en unidades de jiffies. Debe tomar la suma de los valores en esta línea para obtener un time_total medir.

Leer ambos utime y stime para el proceso que le interesa y lea time_total de /proc/stat . Luego duerma por un segundo más o menos, y léalos todos de nuevo. Ahora puede calcular el uso de CPU del proceso durante el tiempo de muestreo, 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);

¿Tiene sentido?


getrusage() puede ayudarlo a determinar el uso del proceso actual o su hijo

Actualización: No puedo recordar una API. Pero todos los detalles estarán en /proc/PID /stat, así que si pudiéramos analizarlo, podemos obtener el porcentaje.

EDITAR: Dado que el porcentaje de CPU no es sencillo de calcular, aquí podría usar cosas de muestreo. Lea ctime y utime para un PID en un punto en el tiempo y lea los mismos valores nuevamente después de 1 segundo. Encuentra la diferencia y divide por cien. Obtendrá la utilización de ese proceso durante el último segundo.

(podría volverse más complejo si hay muchos procesadores)


Linux
  1. Cómo buscar en la web desde la terminal en Linux

  2. ¿Cómo funciona internamente copy_from_user del kernel de Linux?

  3. ¿Cómo calcular la utilización de la CPU de un proceso y todos sus procesos secundarios en Linux?

  4. ¿Cómo obtener el PID principal de un proceso determinado en GNU/Linux desde la línea de comandos?

  5. ¿Cómo retiene Linux el control de la CPU en una máquina de un solo núcleo?

Cómo mostrar el uso de la CPU desde la línea de comandos

Cómo cambiar la prioridad de un proceso en Linux

Cómo obtener el uso de la CPU de un solo proceso en Linux

Cómo encontrar el PID y PPID de un proceso en Linux

Cómo verificar el uso o la utilización de la CPU de Linux

¿Cómo obtengo el uso total de CPU de una aplicación de /proc/pid/stat?