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)