mac os x下进程使用的内存

7 memory macos cocoa pid

给定PID,如何获取进程当前使用的内存?具体我正在寻找:

  • 进程使用的专用物理内存(RAM)
  • 进程使用的交换空间

但我对映射文件和共享内存不感兴趣.简而言之,我想确定通过终止PID释放多少内存(RAM和交换).

use*_*321 7

这会有用吗?您可以使用ps带有各种选项的命令来获得至少其中一些内容:

ps -o rss -o vsz -o pid
Run Code Online (Sandbox Code Playgroud)

将为您提供常驻集大小、虚拟大小和进程 ID。我从提供交换地址的man页面中看到-o paddr,但我没有看到哪个选项为您提供了交换大小。

  • 或者更简单:`ps -o rss,vsz,pid`。 (4认同)

aec*_*ley 6

您可以使用 Mach 的 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;
  }
}
Run Code Online (Sandbox Code Playgroud)

我认为这不包括共享内存段,但我不确定。