рассчитать объем памяти, используемый конкретным процессом в Linux - PullRequest
0 голосов
/ 27 февраля 2012

Я пишу программу для отслеживания каждого системного вызова, вызываемого дочерним процессом, и определения точного использования памяти (исключая разделение памяти).

вот мой план.

let childпроцесс, отслеживаемый родительским процессом,

, если дочерний процесс выполняет системные вызовы, родительский процесс получит SIGTRAP,

, затем получит идентификатор системного вызова с помощью ptrace (PTRACE_PEEKUSER, child_pid, 4 * ORIG_EAX, NULL).

когда идентификатор равен SYS_brk, SYS_sbrk, SYS_mmap2, SYS_mmap, SYS_mremap, SYS_munmap,

я могу получить параметры вызова и рассчитать объем использования памяти.

но меня беспокоит, что

  1. Я не уверен, как рассчитать.

  2. SYS_mmap2 имеет более 6 параметров, как мне его получить?

1 Ответ

2 голосов
/ 27 февраля 2012

Чтобы определить использование памяти для процесса pid 1234, я предлагаю читать последовательно и анализировать псевдофайл /proc/1234/maps или /proc/1234/smaps.Другие файлы в /proc/1234/ также могут быть релевантными (например, /proc/1234/statm и /proc/1234/status)

Изнутри процесса вы можете прочитать /proc/self/maps или /proc/self/smaps (и, например, /proc/self/statm и /proc/self/status).

Подробнее см. Справочную страницу proc (5) .

Существует также команда pmap

...