Реализация команды top в Linux на языке C
Всем привет, хочу реализовать команду top, но только для 1 процесса, вся инфа о процессе хранится в файле /proc/[pid]/status. Не понимаю какие строчки считывать из этого файла. Хочу чтобы были считанны или как преобразованы эти данные к виду: ЦП n%, Память m MiB. Почитал на сайтах про этот файл, но как бы не могу вычленить, что мне нужгл
Ответы (1 шт):
Хочу чтобы были считанны или как преобразованы эти данные к виду: ЦП n%,
Для этого из /proc/[pid]/stat надо получить utime и stime процесса, сложить их, подождать какое-то время (полсекунды—секунду) и снова прочитать utime и stime. Затем разделить разницу первого и второго времени на то время которое прождал между измерениями, а результат умнож на 100 — получишь число в процентах. utime и stime хранятся в тиках (см. sysconf(_SC_CLK_TCK)).
Память m MiB.
Зависит от того, какая именно память тебе нужна. Обычный top выводит 3 вида: virt, res и shr. Все они есть в ``/proc/[pid]/statmemи в/proc/[pid]/status`:
- Виртуальная (
virt) — этоsizeиVmSizeвstatmemиstatusсоответственно. - Резидентная (
res) — этоresidentиVmRSSвstatmemиstatus. - Разделяемая (
shr) — этоsharedиRssFile+RssShmemвstatmemиstatus.
В чём разница между ними смотри в любом руководстве по unix-подобным ОС. Тебя скорей всего будет интересовать резидентная. В statmem размеры памяти хранятся в страницах, запросить размер страницы можно с помощью sysconf(_SC_PAGESIZE) (почти на всех системах он будет 4096 т.е. 4 kiB ). В status всё хранится в килобайтах (нормальных — киБ).
Подробности по содержимому файлов смотри в
man 5 proc.