Память, используемая процессом под Mac OS X

Учитывая PID, как я могу получить память, используемую в настоящее время процессом? В частности, я ищу:

  • Частная физическая память (ОЗУ), используемая процессом
  • Пространство подкачки, используемое процессом

Но меня не интересуют сопоставленные файлы и общая память. Короче говоря, я хотел бы определить, сколько памяти (оперативной памяти и подкачки) будет освобождено путем завершения PID.

2 ответа

Решение

Вы можете использовать вызов task_info Маха, чтобы найти эту информацию. Вот код, который работает на OS X v10.9 и который получает размер виртуального процесса текущего процесса:

#include <mach/mach.h>
#include <mach/message.h>  // for mach_msg_type_number_t
#include <mach/kern_return.h>  // for kern_return_t
#include <mach/task_info.h>
#include <stdio.h>

int main(void) {
  kern_return_t error;
  mach_msg_type_number_t outCount;
  mach_task_basic_info_data_t taskinfo;

  taskinfo.virtual_size = 0;
  outCount = MACH_TASK_BASIC_INFO_COUNT;
  error = task_info(mach_task_self(), MACH_TASK_BASIC_INFO, (task_info_t)&taskinfo, &outCount);
  if (error == KERN_SUCCESS) {
    // type is mach_vm_size_t
    printf("vsize = %llu\n", (unsigned long long)taskinfo.virtual_size);
    return 0;
  } else {
    printf("error %d\n", (int)error);
    return 1;
  }
}

Я думаю, что это исключает сегменты общей памяти, но я не уверен.

Будет ли это полезно? Вы можете использовать ps Команда с различными параметрами, чтобы получить хотя бы некоторые из этих вещей:

ps -o rss -o vsz -o pid

предоставит размер резидентного набора, виртуальный размер и идентификатор процесса. Я вижу из man страница, которая -o paddr дает адрес подкачки, но я не вижу, какой вариант дает размер свопа.

Другие вопросы по тегам