Реализация команды top в Linux на языке C

Всем привет, хочу реализовать команду top, но только для 1 процесса, вся инфа о процессе хранится в файле /proc/[pid]/status. Не понимаю какие строчки считывать из этого файла. Хочу чтобы были считанны или как преобразованы эти данные к виду: ЦП n%, Память m MiB. Почитал на сайтах про этот файл, но как бы не могу вычленить, что мне нужгл


Ответы (1 шт):

Автор решения: Fat-Zer

Хочу чтобы были считанны или как преобразованы эти данные к виду: ЦП 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.

→ Ссылка