GNU/Linux >> Znalost Linux >  >> Linux

Jak vypočítat využití CPU procesu pomocí PID v Linuxu z C?

Musíte analyzovat data z /proc/<PID>/stat . Toto je několik prvních polí (od Documentation/filesystems/proc.txt ve zdrojovém kódu vašeho jádra):

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

Pravděpodobně jste po utime a/nebo stime . Budete si také muset přečíst cpu řádek od /proc/stat , který vypadá takto:

cpu  192369 7119 480152 122044337 14142 9937 26747 0 0

To vám říká kumulativní čas CPU, který byl použit v různých kategoriích, v jednotkách minut. Chcete-li získat time_total, musíte vzít součet hodnot na tomto řádku měřit.

Přečtěte si oba utime a stime pro proces, který vás zajímá, a přečtěte si time_total od /proc/stat . Pak se na chvíli vyspěte a znovu si je všechny přečtěte. Nyní můžete vypočítat využití procesoru procesu během doby vzorkování pomocí:

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

Dává to smysl?


getrusage() vám může pomoci při určování použití aktuálního procesu nebo jeho potomka

Aktualizace: Nepamatuji si API. Všechny podrobnosti však budou v /proc/PID /stat, takže pokud bychom to mohli analyzovat, můžeme získat procento.

UPRAVIT: Protože výpočet % CPU není přímočarý, můžete zde použít vzorkování. Odečtěte ctime a utime pro PID v určitém okamžiku a po 1 sekundě znovu načtěte stejné hodnoty. Najděte rozdíl a vydělte stovkami. Získáte využití pro tento proces za poslední jednu sekundu.

(může být složitější, pokud existuje mnoho procesorů)


Linux
  1. Linux – Jak číst z /proc/$pid/mem pod Linuxem?

  2. Jak interně funguje copy_from_user z jádra Linuxu?

  3. Jak si Linux zachovává kontrolu nad CPU na jednojádrovém stroji?

  1. Jak omezit využití CPU procesu v Linuxu

  2. Jak vyhledávat na webu z terminálu v systému Linux

  3. Jak nastavit afinitu CPU pro proces z C nebo C++ v Linuxu?

  1. Jak získám cestu k procesu v Unixu / Linuxu

  2. Jak vypočítat využití CPU procesu a všech jeho podřízených procesů v Linuxu?

  3. Jak získat rodičovské PID daného procesu v GNU/Linuxu z příkazového řádku?