GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie berechnet man die CPU-Auslastung eines Prozesses durch PID in Linux von C?

Sie müssen die Daten aus /proc/<PID>/stat parsen . Dies sind die ersten paar Felder (ab Documentation/filesystems/proc.txt in Ihrer Kernel-Quelle):

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

Sie sind wahrscheinlich nach utime und/oder stime . Sie müssen auch cpu lesen Zeile ab /proc/stat , das so aussieht:

cpu  192369 7119 480152 122044337 14142 9937 26747 0 0

Dies gibt Ihnen die kumulierte CPU-Zeit an, die in verschiedenen Kategorien verwendet wurde, in Einheiten von Jiffies. Sie müssen die Summe der Werte in dieser Zeile nehmen, um einen time_total zu erhalten messen.

Lesen Sie beide utime und stime für den Prozess, an dem Sie interessiert sind, und lesen Sie time_total von /proc/stat . Dann schlafen Sie für eine Sekunde oder so und lesen Sie sie alle noch einmal. Sie können nun die CPU-Auslastung des Prozesses über die Abtastzeit berechnen, mit:

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

Sinnvoll?


getrusage() kann Ihnen helfen, die Verwendung des aktuellen Prozesses oder seines untergeordneten Prozesses zu bestimmen

Aktualisierung: An eine API kann ich mich nicht erinnern. Aber alle Details befinden sich in /proc/PID /stat, also wenn wir es parsen könnten, könnten wir den Prozentsatz bekommen.

BEARBEITEN: Da CPU % nicht einfach zu berechnen ist, könnten Sie hier Stichproben verwenden. Lesen Sie ctime und utime für einen PID zu einem bestimmten Zeitpunkt und lesen Sie die gleichen Werte nach 1 Sekunde erneut. Finde die Differenz und teile durch Hundert. Sie werden für mehr als eine Sekunde für diesen Vorgang verwendet.

(könnte komplexer werden, wenn viele Prozessoren vorhanden sind)


Linux
  1. So begrenzen Sie die CPU-Auslastung eines Prozesses in Linux

  2. Wie erhalte ich die übergeordnete PID eines bestimmten Prozesses in GNU/Linux von der Befehlszeile aus?

  3. Linux :Sehen Sie sich die CPU-Auslastung durch einen Prozess für die letzte Sekunde an

  4. Wie behält Linux die Kontrolle über die CPU auf einem Single-Core-Rechner?

  5. Wie wird die Speichernutzung in Linux gemeldet?

So zeigen Sie die CPU-Auslastung über die Befehlszeile an

So ändern Sie die Priorität eines Prozesses in Linux

So erhalten Sie die CPU-Auslastung eines einzelnen Prozesses in Linux

So finden Sie die PID und PPID eines Prozesses in Linux

So überprüfen Sie die Linux-CPU-Auslastung oder -Auslastung

Wie erhalte ich die gesamte CPU-Auslastung einer Anwendung aus /proc/pid/stat?