Модераторы: xvr

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> зная PID процесса узнать сколько мгц он потребляет 
V
    Опции темы
duken
Дата 7.5.2008, 18:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 5.3.2008

Репутация: нет
Всего: нет



надо для системы контроля нагрузки (впринципе можно и с OpenSource-версией, не велика ценность/уникальность)
надо функцию на C (либо алгоритм на русском smile ) которая получает PID и выдаёт количество мгц, чем точнее, тем лучше smile ну ещё можно в %% от ядра на котором исполняется процесс, с точностью до 0,1%
никак не могу найти как это сделать... ни алгоритма, ни кода... :(

Это сообщение отредактировал(а) duken - 7.5.2008, 18:23
PM MAIL   Вверх
JackYF
Дата 7.5.2008, 19:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 3
Всего: 162



Есть такая штука под Unix-like - ps называется. Она как раз по pid и выдаёт % использования процессора. Код открыт - бери и смотри.
Ещё вариант - посмотри в /proc/<pid> - там вся инфа по процессу и есть, найти в документации только, что именно оттуда брать.


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
duken
Дата 8.5.2008, 02:19 (ссылка)    | (голосов:4) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 5.3.2008

Репутация: нет
Всего: нет



JackYF, в /proc/pid/ сам бы порылся сначала, там нифига нету!

читать блин научись
Цитата

никак не могу найти как это сделать... ни алгоритма, ни кода... :(

это значит что я нашёл где посмотреть память, название и прочее, это в /proc/<pid>/status а вот как узнать процент CPU/количество мегагерц - нигде нету. а исходники top это вообще хрень полная, каждая функция размазана по всему файлу, да ещё и не по одному кажись... нереально что-то найти, найти то чо надо - тем более...
а сам ps кстати процент CPU не выдаёт!
может кто-нибудь всё-таки знает?

Добавлено через 1 минуту и 11 секунд
JackYF, в каких доках? man proc пишет по-русски, но там нифига не написано.
PM MAIL   Вверх
t_gran
Дата 8.5.2008, 03:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 621
Регистрация: 13.11.2007
Где: г.Усть-Илимск

Репутация: нет
Всего: 37



На мой взгляд, если в инете нигде нету (не смотрел), я думаю надо брать source утилиты top. В ней как раз уже реализовано всё что требуется.


--------------------
Я знаю, что ничего не знаю© Сократ
user posted image
PM MAIL WWW   Вверх
t_gran
Дата 8.5.2008, 03:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 621
Регистрация: 13.11.2007
Где: г.Усть-Илимск

Репутация: нет
Всего: 37



Кстати на sf.net нашел:
1. htop.
2. top
3. collectl

Это сообщение отредактировал(а) t_gran - 8.5.2008, 03:51


--------------------
Я знаю, что ничего не знаю© Сократ
user posted image
PM MAIL WWW   Вверх
duken
Дата 8.5.2008, 08:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 5.3.2008

Репутация: нет
Всего: нет



t_gran, спасибо smile

Это сообщение отредактировал(а) duken - 8.5.2008, 08:35
PM MAIL   Вверх
JackYF
Дата 8.5.2008, 12:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 3
Всего: 162



Цитата(duken @  8.5.2008,  01:19 Найти цитируемый пост)
там нифига нету!

читать блин научись

Во-первых, спокойно и без перехода на личности, а во-вторых, догадайся с трёх раз, откуда top, ps и компания берёт эту информацию.


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
MAKCim
Дата 8.5.2008, 12:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 84
Всего: 207



duken, 

M
MAKCim
Модератор: Не надо грубить!


Добавлено через 2 минуты и 6 секунд
Цитата(duken @  8.5.2008,  02:19 Найти цитируемый пост)
в /proc/pid/ сам бы порылся сначала, там нифига нету!

я пороюсь за него, но если я там найду требуемую информацию, то  публично извинишься перед JackYF 


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
JackYF
Дата 8.5.2008, 19:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 3
Всего: 162



Я пару раз рылся в /proc/<pid>, но не досконально. Если, всё-таки, ни MAKCim, ни я эту информацию не найдём, то я извинюсь за неумышленную дезинформацию. Другое дело, что грубость в любом случае неправомерна.


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
MAKCim
Дата 8.5.2008, 20:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 84
Всего: 207



вот trace-лог команды
Код

# strace ps -U rei3er -o %cpu 2>log


Цитата

...
open("/proc/3205/status", O_RDONLY)     = 6
read(6, "Name:\tgnome-session\nState:\tS (sl"..., 1023) = 697
close(6)                                = 0
fstat(1, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 1), ...}) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x2af6f8ffc000
write(1, "%CPU\n", 5)                   = 5
write(1, " 0.0\n", 5)                   = 5
stat("/proc/3251", {st_mode=S_IFDIR|0555, st_size=0, ...}) = 0
open("/proc/3251/stat", O_RDONLY)       = 6
read(6, "3251 (ssh-agent) S 3205 3251 325"..., 1023) = 221
close(6)                                = 0
open("/proc/3251/status", O_RDONLY)     = 6
read(6, "Name:\tssh-agent\nState:\tS (sleepi"..., 1023) = 692
close(6)                                = 0
write(1, " 0.0\n", 5)                   = 5
stat("/proc/3255", {st_mode=S_IFDIR|0555, st_size=0, ...}) = 0
open("/proc/3255/stat", O_RDONLY)       = 6
read(6, "3255 (dbus-daemon) S 1 3255 3255"..., 1023) = 229
close(6)                                = 0
open("/proc/3255/status", O_RDONLY)     = 6
read(6, "Name:\tdbus-daemon\nState:\tS (slee"..., 1023) = 691
close(6)                                = 0
write(1, " 0.0\n", 5)                   = 5
stat("/proc/3259", {st_mode=S_IFDIR|0555, st_size=0, ...}) = 0
open("/proc/3259/stat", O_RDONLY)       = 6
read(6, "3259 (gconfd-2) S 1 3205 3205 0 "..., 1023) = 228
close(6)                                = 0
open("/proc/3259/status", O_RDONLY)     = 6
read(6, "Name:\tgconfd-2\nState:\tS (sleepin"..., 1023) = 688
close(6)                                = 0
write(1, " 0.0\n", 5)                   = 5
stat("/proc/3264", {st_mode=S_IFDIR|0555, st_size=0, ...}) = 0
open("/proc/3264/stat", O_RDONLY)       = 6
read(6, "3264 (gnome-keyring-d) S 1 3205 "..., 1023) = 228
close(6)                                = 0
open("/proc/3264/status", O_RDONLY)     = 6
read(6, "Name:\tgnome-keyring-d\nState:\tS ("..., 1023) = 695
close(6)                                = 0
write(1, " 0.0\n", 5)                   = 5
stat("/proc/3266", {st_mode=S_IFDIR|0555, st_size=0, ...}) = 0
open("/proc/3266/stat", O_RDONLY)       = 6
read(6, "3266 (gnome-settings-) S 1 3255 "..., 1023) = 240
close(6)                                = 0
open("/proc/3266/status", O_RDONLY)     = 6
read(6, "Name:\tgnome-settings-\nState:\tS ("..., 1023) = 695
close(6)                                = 0
write(1, " 0.0\n", 5)                   = 5
stat("/proc/3283", {st_mode=S_IFDIR|0555, st_size=0, ...}) = 0
open("/proc/3283/stat", O_RDONLY)       = 6
read(6, "3283 (metacity) S 1 3283 3283 0 "..., 1023) = 224
close(6)                                = 0
open("/proc/3283/status", O_RDONLY)     = 6
read(6, "Name:\tmetacity\nState:\tS (sleepin"..., 1023) = 688
close(6)                                = 0
write(1, " 0.0\n", 5)                   = 5
stat("/proc/3285", {st_mode=S_IFDIR|0555, st_size=0, ...}) = 0
open("/proc/3285/stat", O_RDONLY)       = 6
read(6, "3285 (nautilus) S 1 3285 3285 0 "..., 1023) = 229
close(6)                                = 0
open("/proc/3285/status", O_RDONLY)     = 6
read(6, "Name:\tnautilus\nState:\tS (sleepin"..., 1023) = 688
close(6)                                = 0
write(1, " 0.0\n", 5)                   = 5
stat("/proc/3289", {st_mode=S_IFDIR|0555, st_size=0, ...}) = 0
open("/proc/3289/stat", O_RDONLY)       = 6
read(6, "3289 (gnome-vfs-daemo) S 1 3255 "..., 1023) = 229
close(6)                                = 0
open("/proc/3289/status", O_RDONLY)     = 6
read(6, "Name:\tgnome-vfs-daemo\nState:\tS ("..., 1023) = 695
close(6)                                = 0
write(1, " 0.0\n", 5)                   = 5
stat("/proc/3295", {st_mode=S_IFDIR|0555, st_size=0, ...}) = 0
open("/proc/3295/stat", O_RDONLY)       = 6
read(6, "3295 (gnome-terminal) S 1 3295 3"..., 1023) = 238
close(6)                                = 0
open("/proc/3295/status", O_RDONLY)     = 6
read(6, "Name:\tgnome-terminal\nState:\tS (s"..., 1023) = 694
close(6)                                = 0
write(1, " 0.0\n", 5)                   = 5
stat("/proc/3297", {st_mode=S_IFDIR|0555, st_size=0, ...}) = 0
open("/proc/3297/stat", O_RDONLY)       = 6
read(6, "3297 (bonobo-activati) S 1 3297 "..., 1023) = 230
close(6)                                = 0
open("/proc/3297/status", O_RDONLY)     = 6
read(6, "Name:\tbonobo-activati\nState:\tS ("..., 1023) = 695
close(6)                                = 0
write(1, " 0.0\n", 5)                   = 5
stat("/proc/3300", {st_mode=S_IFDIR|0555, st_size=0, ...}) = 0
open("/proc/3300/stat", O_RDONLY)       = 6
read(6, "3300 (evolution-alarm) S 1 3300 "..., 1023) = 234
close(6)                                = 0
open("/proc/3300/status", O_RDONLY)     = 6
read(6, "Name:\tevolution-alarm\nState:\tS ("..., 1023) = 695
close(6)                                = 0
write(1, " 0.0\n", 5)                   = 5
stat("/proc/3304", {st_mode=S_IFDIR|0555, st_size=0, ...}) = 0
open("/proc/3304/stat", O_RDONLY)       = 6
read(6, "3304 (application-bro) S 1 3304 "..., 1023) = 232
close(6)                                = 0
open("/proc/3304/status", O_RDONLY)     = 6
read(6, "Name:\tapplication-bro\nState:\tS ("..., 1023) = 695
close(6)                                = 0
write(1, " 0.0\n", 5)                   = 5
stat("/proc/3307", {st_mode=S_IFDIR|0555, st_size=0, ...}) = 0
open("/proc/3307/stat", O_RDONLY)       = 6
read(6, "3307 (nm-applet) S 1 3307 3307 0"..., 1023) = 221
close(6)                                = 0
open("/proc/3307/status", O_RDONLY)     = 6
read(6, "Name:\tnm-applet\nState:\tS (sleepi"..., 1023) = 689
close(6)                                = 0
write(1, " 0.0\n", 5)                   = 5
stat("/proc/3309", {st_mode=S_IFDIR|0555, st_size=0, ...}) = 0
open("/proc/3309/stat", O_RDONLY)       = 6
read(6, "3309 (gnome-power-man) S 1 3309 "..., 1023) = 231
close(6)                                = 0
open("/proc/3309/status", O_RDONLY)     = 6
read(6, "Name:\tgnome-power-man\nState:\tS ("..., 1023) = 695
close(6)                                = 0
write(1, " 0.0\n", 5)                   = 5
stat("/proc/3317", {st_mode=S_IFDIR|0555, st_size=0, ...}) = 0
open("/proc/3317/stat", O_RDONLY)       = 6
read(6, "3317 (evolution-data-) S 1 3297 "..., 1023) = 234
close(6)                                = 0
open("/proc/3317/status", O_RDONLY)     = 6
read(6, "Name:\tevolution-data-\nState:\tS ("..., 1023) = 695
close(6)                                = 0
write(1, " 0.0\n", 5)                   = 5
stat("/proc/3337", {st_mode=S_IFDIR|0555, st_size=0, ...}) = 0
open("/proc/3337/stat", O_RDONLY)       = 6
read(6, "3337 (mapping-daemon) S 1 3285 3"..., 1023) = 205
close(6)                                = 0
open("/proc/3337/status", O_RDONLY)     = 6
read(6, "Name:\tmapping-daemon\nState:\tS (s"..., 1023) = 694
close(6)                                = 0
write(1, " 0.0\n", 5)                   = 5
stat("/proc/3342", {st_mode=S_IFDIR|0555, st_size=0, ...}) = 0
open("/proc/3342/stat", O_RDONLY)       = 6
read(6, "3342 (gnome-pty-helpe) S 3295 32"..., 1023) = 213
close(6)                                = 0
open("/proc/3342/status", O_RDONLY)     = 6
read(6, "Name:\tgnome-pty-helpe\nState:\tS ("..., 1023) = 692
close(6)                                = 0
write(1, " 0.0\n", 5)                   = 5
stat("/proc/3343", {st_mode=S_IFDIR|0555, st_size=0, ...}) = 0
open("/proc/3343/stat", O_RDONLY)       = 6
read(6, "3343 (bash) S 3295 3343 3343 348"..., 1023) = 259
close(6)                                = 0
open("/proc/3343/status", O_RDONLY)     = 6
read(6, "Name:\tbash\nState:\tS (sleeping)\nS"..., 1023) = 688
close(6)                                = 0
write(1, " 0.0\n", 5)                   = 5
stat("/proc/3351", {st_mode=S_IFDIR|0555, st_size=0, ...}) = 0
open("/proc/3351/stat", O_RDONLY)       = 6
read(6, "3351 (gnome-screensav) S 1 3351 "..., 1023) = 227
close(6)                                = 0
open("/proc/3351/status", O_RDONLY)     = 6
read(6, "Name:\tgnome-screensav\nState:\tS ("..., 1023) = 695
close(6)                                = 0
write(1, " 0.0\n", 5)                   = 5
stat("/proc/3408", {st_mode=S_IFDIR|0555, st_size=0, ...}) = 0
open("/proc/3408/stat", O_RDONLY)       = 6
read(6, "3408 (dhcpcd) S 1 3408 3408 0 -1"..., 1023) = 204
close(6)                                = 0
open("/proc/3408/status", O_RDONLY)     = 6
read(6, "Name:\tdhcpcd\nState:\tS (sleeping)"..., 1023) = 635
close(6)                                = 0
stat("/proc/3410", {st_mode=S_IFDIR|0555, st_size=0, ...}) = 0
open("/proc/3410/stat", O_RDONLY)       = 6
read(6, "3410 (firefox) S 1 3409 3343 348"..., 1023) = 240
close(6)                                = 0
open("/proc/3410/status", O_RDONLY)     = 6
read(6, "Name:\tfirefox\nState:\tS (sleeping"..., 1023) = 688
close(6)                                = 0
write(1, " 0.0\n", 5)                   = 5
stat("/proc/3415", {st_mode=S_IFDIR|0555, st_size=0, ...}) = 0
open("/proc/3415/stat", O_RDONLY)       = 6
read(6, "3415 (firefox-bin) S 3410 3409 3"..., 1023) = 242
close(6)                                = 0
open("/proc/3415/status", O_RDONLY)     = 6
read(6, "Name:\tfirefox-bin\nState:\tS (slee"..., 1023) = 695
close(6)                                = 0
write(1, " 1.2\n", 5)                   = 5
stat("/proc/3424", {st_mode=S_IFDIR|0555, st_size=0, ...}) = 0
open("/proc/3424/stat", O_RDONLY)       = 6
read(6, "3424 (netstat) Z 3415 3409 3343 "..., 1023) = 154
close(6)                                = 0
open("/proc/3424/status", O_RDONLY)     = 6
read(6, "Name:\tnetstat\nState:\tZ (zombie)\n"..., 1023) = 494
close(6)                                = 0
write(1, " 0.0\n", 5)                   = 5
stat("/proc/3542", {st_mode=S_IFDIR|0555, st_size=0, ...}) = 0
open("/proc/3542/stat", O_RDONLY)       = 6
read(6, "3542 (bash) S 3295 3542 3542 348"..., 1023) = 235
close(6)                                = 0
open("/proc/3542/status", O_RDONLY)     = 6
read(6, "Name:\tbash\nState:\tS (sleeping)\nS"..., 1023) = 688
close(6)                                = 0
write(1, " 0.0\n", 5)                   = 5
stat("/proc/4072", {st_mode=S_IFDIR|0555, st_size=0, ...}) = 0
open("/proc/4072/stat", O_RDONLY)       = 6
read(6, "4072 (strace) S 3343 4072 3343 3"..., 1023) = 229
close(6)                                = 0
open("/proc/4072/status", O_RDONLY)     = 6
read(6, "Name:\tstrace\nState:\tS (sleeping)"..., 1023) = 690
close(6)                                = 0
write(1, " 0.0\n", 5)                   = 5
stat("/proc/4073", {st_mode=S_IFDIR|0555, st_size=0, ...}) = 0
open("/proc/4073/stat", O_RDONLY)       = 6
read(6, "4073 (ps) R 4072 4072 3343 34817"..., 1023) = 206
close(6)                                = 0
open("/proc/4073/status", O_RDONLY)     = 6
read(6, "Name:\tps\nState:\tR (running)\nSlee"..., 1023) = 687
close(6)                                = 0
write(1, " 0.0\n", 5)                   = 5
getdents64(5, /* 0 entries */, 8192)    = 0
close(5)                                = 0
exit_group(0)                           = ?
Process 4073 detached


видно, что используется /proc


Цитата(duken @  8.5.2008,  02:19 Найти цитируемый пост)
а сам ps кстати процент CPU не выдаёт!

Код

# ps -o %cpu

не то?  smile 


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
duken
Дата 9.5.2008, 04:39 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 5.3.2008

Репутация: нет
Всего: нет



MAKCim, то что там нихрена нету - я имел ввиду готовых значений. если бы они там были... а алгоритм расчётов я как раз незнаю. указания количества потребляемых мегагерц или процентов CPU в /proc/<pid>/ нету.
про то, используется /proc при их вычислении или нет, я ничего не говорил. и так знаю что да.
а за
Цитата

а сам ps кстати процент CPU не выдаёт!

извиняюсь.

может кто-нибудь всё-таки может ответить что-нибудь внятное на мою просьбу, озвученную в первом посте? врпинципе можно и не на русском. ссылку, или здесь.
PM MAIL   Вверх
MAKCim
Дата 9.5.2008, 09:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 84
Всего: 207



duken, 
сформулируй, что значит "количество мегагерц"?


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
xvr
Дата 12.5.2008, 13:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 20
Всего: 223



Цитата(duken @ 9.5.2008,  04:39)
может кто-нибудь всё-таки может ответить что-нибудь внятное на мою просьбу, озвученную в первом посте? врпинципе можно и не на русском. ссылку, или здесь.

ps вычисляет %cpu как отношение астрономического времени, прошедшего с момента запуска программы к сумме его stime+utime (все берется из /proc/xxx/stat)
top вычисляет тоже самое на основе изменения stime+utime каждого процесса за 2 последовательных интервала опроса (берется процент от суммы приращений stime+utime по всем процессам, возможно по всем показываемым на экране, не уточнял)

PM MAIL   Вверх
Dogevec
Дата 6.9.2008, 01:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 51
Регистрация: 22.8.2008

Репутация: нет
Всего: нет



Писоединяюсь к вопросу про вычисление мегагарц под каждый выбранный процесс. Ну вот допустим у меня команда /proc/<PID>/stat выдала вот такое:

cat /proc/3190/stat:
3190 (ksmserver) S 1 3174 3174 0 -1 4202560 2168 0 6 0 4 11 0 0 18 0 1 0 18482 26296320 2449 4294967295 134512640 134551920 3214674864 3214672224 3063738056 0 0 4096 83115 0 0 0 17 0 0 0 0

И из каких же значиний и каким макаром я могу вычислить количество мегагерц, потребляемых данным процессом?

PM MAIL   Вверх
xvr
Дата 6.9.2008, 12:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 20
Всего: 223



Цитата(Dogevec @ 6.9.2008,  01:00)
Писоединяюсь к вопросу про вычисление мегагарц под каждый выбранный процесс. Ну вот допустим у меня команда /proc/<PID>/stat выдала вот такое:

cat /proc/3190/stat:
3190 (ksmserver) S 1 3174 3174 0 -1 4202560 2168 0 6 0 4 11 0 0 18 0 1 0 18482 26296320 2449 4294967295 134512640 134551920 3214674864 3214672224 3063738056 0 0 4096 83115 0 0 0 17 0 0 0 0

И из каких же значиний и каким макаром я могу вычислить количество мегагерц, потребляемых данным процессом?

Одним постом выше было все написано  smile Или надо декодировать содержимое stat?
Цитата

/proc/[number]/stat 
Status information about the process. This is used by ps(1). It is defined in /usr/src/linux/fs/proc/array.c. 
The fields, in order, with their proper scanf(3) format specifiers, are: 

pid %d 3190
The process ID. 

comm %s  (ksmserver)
The filename of the executable, in parentheses. This is visible whether or not the executable is swapped out. 

state %c S
One character from the string "RSDZTW" where R is running, S is sleeping in an interruptible wait, D is waiting in uninterruptible disk sleep, Z is zombie, T is traced or stopped (on a signal), and W is paging. 

ppid %d 1
The PID of the parent. 

pgrp %d 3174
The process group ID of the process. 

session %d 3174
The session ID of the process. 

tty_nr %d 0
The tty the process uses. 

tpgid %d -1
The process group ID of the process which currently owns the tty that the process is connected to. 

flags %lu 4202560
The kernel flags word of the process. For bit meanings, see the PF_* defines in <linux/sched.h>. Details depend on the kernel version. 

minflt %lu 2168
The number of minor faults the process has made which have not required loading a memory page from disk. 

cminflt %lu 0
The number of minor faults that the process's waited-for children have made. 

majflt %lu 6
The number of major faults the process has made which have required loading a memory page from disk. 

cmajflt %lu 0
The number of major faults that the process's waited-for children have made. 

utime %lu 4
The number of jiffies that this process has been scheduled in user mode. 

stime %lu 11
The number of jiffies that this process has been scheduled in kernel mode. 

cutime %ld 0
The number of jiffies that this process's waited-for children have been scheduled in user mode. (See also times(2).) 

cstime %ld 0
The number of jiffies that this process's waited-for children have been scheduled in kernel mode. 

priority %ld 18
The standard nice value, plus fifteen. The value is never negative in the kernel. 

nice %ld 0
The nice value ranges from 19 (nicest) to -19 (not nice to others). 

0 %ld 1
This value is hard coded to 0 as a placeholder for a removed field. 

itrealvalue %ld 0
The time in jiffies before the next SIGALRM is sent to the process due to an interval timer. 

starttime %lu 18482
The time in jiffies the process started after system boot. 

vsize %lu 26296320
Virtual memory size in bytes. 

rss %ld 2449
Resident Set Size: number of pages the process has in real memory, minus 3 for administrative purposes. This is just the pages which count towards text, data, or stack space. This does not include pages which have not been demand-loaded in, or which are swapped out. 

rlim %lu 4294967295
Current limit in bytes on the rss of the process (usually 4294967295 on i386). 

startcode %lu 134512640
The address above which program text can run. 

endcode %lu 134551920
The address below which program text can run. 

startstack %lu 3214674864
The address of the start of the stack. 

kstkesp %lu 3214672224
The current value of esp (stack pointer), as found in the kernel stack page for the process. 

kstkeip %lu 3063738056
The current EIP (instruction pointer). 

signal %lu 0
The bitmap of pending signals. 

blocked %lu 0
The bitmap of blocked signals. 

sigignore %lu 4096
The bitmap of ignored signals. 

sigcatch %lu 83115
The bitmap of caught signals. 

wchan %lu 0
This is the "channel" in which the process is waiting. It is the address of a system call, and can be looked up in a namelist if you need a textual name. (If you have an up-to-date /etc/psdatabase, then try ps -l to see the WCHAN field in action.) 

nswap %lu 0
Number of pages swapped (not maintained). 

cnswap %lu 0
Cumulative nswap for child processes (not maintained). 

exit_signal %d 17
Signal to be sent to parent when we die. 

processor %d 0
CPU number last executed on. 

rt_priority %lu (since kernel 2.5.19) 0
Real-time scheduling priority (see sched_setscheduler(2)). 

policy %lu (since kernel 2.5.19) 0
Scheduling policy (see sched_setscheduler(2)). 
Итого: utime=4, stime=11, starttime=18482, текущее время (curtime) =   uptime(0,0)*Hertz;
Hertz - частота системного таймера в ядре (можно забить константой)

CPU% = (utime+stime)/(curtime-starttime) * 100%

Для определения Hertz можно взять это:
Код

// Copyright (C) 1992-1998 by Michael K. Johnson, [email protected]
// Copyright 1998-2003 Albert Cahalan
//
// This file is placed under the conditions of the GNU Library
// General Public License, version 2, or any later version.
// See file COPYING for information on distribution conditions.
//
// File for parsing top-level /proc entities. */
//
// June 2003, Fabian Frederick, disk and slab info

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <locale.h>

#include <unistd.h>
#include <fcntl.h>
#include "version.h"
#include "sysinfo.h" /* include self to verify prototypes */

#ifndef HZ
#include <netinet/in.h>  /* htons */
#endif

#define UPTIME_FILE  "/proc/uptime"
static int uptime_fd = -1;

static char buf[1024];

/* This macro opens filename only if necessary and seeks to 0 so
 * that successive calls to the functions are more efficient.
 * It also reads the current contents of the file into the global buf.
 */
#define FILE_TO_BUF(filename, fd) do{                \
    static int local_n;                        \
    if (fd == -1 && (fd = open(filename, O_RDONLY)) == -1) {    \
    fputs(BAD_OPEN_MESSAGE, stderr);            \
    fflush(NULL);                        \
    _exit(102);                        \
    }                                \
    lseek(fd, 0L, SEEK_SET);                    \
    if ((local_n = read(fd, buf, sizeof buf - 1)) < 0) {    \
    perror(filename);                    \
    fflush(NULL);                        \
    _exit(103);                        \
    }                                \
    buf[local_n] = '\0';                    \
}while(0)

/* evals 'x' twice */
#define SET_IF_DESIRED(x,y) do{  if(x) *(x) = (y); }while(0)


/***********************************************************************/
int uptime(double *restrict uptime_secs, double *restrict idle_secs) {
    double up=0, idle=0;
    char *restrict savelocale;

    FILE_TO_BUF(UPTIME_FILE,uptime_fd);
    savelocale = setlocale(LC_NUMERIC, NULL);
    setlocale(LC_NUMERIC,"C");
    if (sscanf(buf, "%lf %lf", &up, &idle) < 2) {
        setlocale(LC_NUMERIC,savelocale);
        fputs("bad data in " UPTIME_FILE "\n", stderr);
        return 0;
    }
    setlocale(LC_NUMERIC,savelocale);
    SET_IF_DESIRED(uptime_secs, up);
    SET_IF_DESIRED(idle_secs, idle);
    return up;    /* assume never be zero seconds in practice */
}

/***********************************************************************
 * Some values in /proc are expressed in units of 1/HZ seconds, where HZ
 * is the kernel clock tick rate. One of these units is called a jiffy.
 * The HZ value used in the kernel may vary according to hacker desire.
 * According to Linus Torvalds, this is not true. He considers the values
 * in /proc as being in architecture-dependant units that have no relation
 * to the kernel clock tick rate. Examination of the kernel source code
 * reveals that opinion as wishful thinking.
 *
 * In any case, we need the HZ constant as used in /proc. (the real HZ value
 * may differ, but we don't care) There are several ways we could get HZ:
 *
 * 1. Include the kernel header file. If it changes, recompile this library.
 * 2. Use the sysconf() function. When HZ changes, recompile the C library!
 * 3. Ask the kernel. This is obviously correct...
 *
 * Linus Torvalds won't let us ask the kernel, because he thinks we should
 * not know the HZ value. Oh well, we don't have to listen to him.
 * Someone smuggled out the HZ value. :-)
 *
 * This code should work fine, even if Linus fixes the kernel to match his
 * stated behavior. The code only fails in case of a partial conversion.
 *
 * Recent update: on some architectures, the 2.4 kernel provides an
 * ELF note to indicate HZ. This may be for ARM or user-mode Linux
 * support. This ought to be investigated. Note that sysconf() is still
 * unreliable, because it doesn't return an error code when it is
 * used with a kernel that doesn't support the ELF note. On some other
 * architectures there may be a system call or sysctl() that will work.
 */

unsigned long long Hertz;

static void old_Hertz_hack(void){
  unsigned long long user_j, nice_j, sys_j, other_j;  /* jiffies (clock ticks) */
  double up_1, up_2, seconds;
  unsigned long long jiffies;
  unsigned h;
  char *restrict savelocale;

  savelocale = setlocale(LC_NUMERIC, NULL);
  setlocale(LC_NUMERIC, "C");
  do{
    FILE_TO_BUF(UPTIME_FILE,uptime_fd);  sscanf(buf, "%lf", &up_1);
    /* uptime(&up_1, NULL); */
    FILE_TO_BUF(STAT_FILE,stat_fd);
    sscanf(buf, "cpu %Lu %Lu %Lu %Lu", &user_j, &nice_j, &sys_j, &other_j);
    FILE_TO_BUF(UPTIME_FILE,uptime_fd);  sscanf(buf, "%lf", &up_2);
    /* uptime(&up_2, NULL); */
  } while((long long)( (up_2-up_1)*1000.0/up_1 )); /* want under 0.1% error */
  setlocale(LC_NUMERIC, savelocale);
  jiffies = user_j + nice_j + sys_j + other_j;
  seconds = (up_1 + up_2) / 2;
  h = (unsigned)( (double)jiffies/seconds/smp_num_cpus );
  /* actual values used by 2.4 kernels: 32 64 100 128 1000 1024 1200 */
  switch(h){
  case    9 ...   11 :  Hertz =   10; break; /* S/390 (sometimes) */
  case   18 ...   22 :  Hertz =   20; break; /* user-mode Linux */
  case   30 ...   34 :  Hertz =   32; break; /* ia64 emulator */
  case   48 ...   52 :  Hertz =   50; break;
  case   58 ...   61 :  Hertz =   60; break;
  case   62 ...   65 :  Hertz =   64; break; /* StrongARM /Shark */
  case   95 ...  105 :  Hertz =  100; break; /* normal Linux */
  case  124 ...  132 :  Hertz =  128; break; /* MIPS, ARM */
  case  195 ...  204 :  Hertz =  200; break; /* normal << 1 */
  case  253 ...  260 :  Hertz =  256; break;
  case  393 ...  408 :  Hertz =  400; break; /* normal << 2 */
  case  790 ...  808 :  Hertz =  800; break; /* normal << 3 */
  case  990 ... 1010 :  Hertz = 1000; break; /* ARM */
  case 1015 ... 1035 :  Hertz = 1024; break; /* Alpha, ia64 */
  case 1180 ... 1220 :  Hertz = 1200; break; /* Alpha */
  default:
#ifdef HZ
    Hertz = (unsigned long long)HZ;    /* <asm/param.h> */
#else
    /* If 32-bit or big-endian (not Alpha or ia64), assume HZ is 100. */
    Hertz = (sizeof(long)==sizeof(int) || htons(999)==999) ? 100UL : 1024UL;
#endif
    fprintf(stderr, "Unknown HZ value! (%d) Assume %Ld.\n", h, Hertz);
  }
}



Добавление:
Цитата

proc/stat 

kernel/system statistics. Varies with architecture. Common entries include: 

cpu 3357 0 4313 1362393 

The amount of time, measured in units of USER_HZ (1/100ths of a second on most architectures), that the system spent in user mode, user mode with low priority (nice), system mode, and the idle task, respectively. The last value should be USER_HZ times the second entry in the uptime pseudo-file. 

Т.е. сумма этих чисел (3357+0+4313+1362393) и есть curtime


Это сообщение отредактировал(а) xvr - 6.9.2008, 12:24
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Программирование под Unix/Linux"
xvr
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой "Код".
  • Вопросы мобильной разработки тут
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, xvr.

 
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Программирование под Unix/Linux | Следующая тема »


 




[ Время генерации скрипта: 0.0697 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.