GNU/Linux >> Belajar Linux >  >> Linux

Bagaimana cara menghitung penggunaan CPU dari suatu proses oleh PID di Linux dari C?

Anda perlu mengurai data dari /proc/<PID>/stat . Ini adalah beberapa kolom pertama (dari Documentation/filesystems/proc.txt di sumber kernel Anda):

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

Anda mungkin mencari utime dan/atau stime . Anda juga harus membaca cpu baris dari /proc/stat , yang terlihat seperti:

cpu  192369 7119 480152 122044337 14142 9937 26747 0 0

Ini memberi tahu Anda waktu CPU kumulatif yang telah digunakan dalam berbagai kategori, dalam satuan sekejap. Anda perlu menjumlahkan nilai pada baris ini untuk mendapatkan time_total ukur.

Baca kedua utime dan stime untuk proses yang Anda minati, dan baca time_total dari /proc/stat . Kemudian tidur sebentar atau lebih, dan baca semuanya lagi. Sekarang Anda dapat menghitung penggunaan CPU dari proses selama waktu pengambilan sampel, dengan:

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

Masuk akal?


getrusage() dapat membantu Anda dalam menentukan penggunaan proses saat ini atau turunannya

Perbarui: Saya tidak dapat mengingat API. Namun semua detail akan ada di /proc/PID /stat, jadi jika kita bisa menguraikannya, kita bisa mendapatkan persentasenya.

EDIT: Karena CPU % tidak mudah untuk dihitung, Anda dapat menggunakan jenis pengambilan sampel di sini. Baca ctime dan utime untuk PID pada suatu titik waktu dan baca nilai yang sama lagi setelah 1 detik. Temukan perbedaannya dan bagi dengan seratus. Anda akan mendapatkan pemanfaatan untuk proses itu selama satu detik terakhir.

(mungkin menjadi lebih rumit jika ada banyak prosesor)


Linux
  1. Cara Mencari Web Dari Terminal Di Linux

  2. Linux – Bagaimana Cara Membaca Dari /proc/$pid/mem Di Linux?

  3. Bagaimana cara mendapatkan PID induk dari proses yang diberikan di GNU/Linux dari baris perintah?

  1. Cara Membatasi Penggunaan CPU Suatu Proses Di Linux

  2. Bagaimana cara Linux mempertahankan kendali CPU pada mesin single-core?

  3. Bagaimana penggunaan memori dilaporkan di Linux?

  1. Bagaimana cara mengatur afinitas CPU untuk proses dari C atau C++ di Linux?

  2. Bagaimana cara mendapatkan jalur proses di Unix / Linux

  3. Bagaimana cara kerja copy_from_user dari kernel Linux secara internal?