在Mac OS X下一个进程使用的内存

11

给定一个 PID,我如何获取进程当前使用的内存?具体地说,我要找:

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

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


请查看https://dev59.com/KnVC5IYBdhLWcg3w-WSs。 - Parag Bafna
谢谢,但是这篇文章提到的工具在Mac上并不可用(/proc,pmap,smem,htop,gcore),或者像valgrind这样的选项也不行。我主要是在寻找一种以编程方式查找进程和程序使用的内存(RAM)和SWAP的方法。 PS可能有效,但它不会报告那些信息。我应该标记objective-c而不是cocoa,但这也不是更好的选择。C / c ++调用也可以,只要它们能够在MAC OS平台上运行即可。 - user2205231
2个回答

8

这个有用吗?你可以使用ps命令和不同的选项来获取至少一些这些东西:

ps -o rss -o vsz -o pid

这将会给你进程的驻留集大小、虚拟大小和进程 ID。从 man 页面中可以看到 -o paddr 可以给出交换地址,但我没有看到哪个选项可以给出交换大小。


谢谢您的回复。我相信这个命令会返回地址空间大小吗?RSS是否也包括共享/映射内存?(注意:-p pid)。 - user2205231
4
甚至更简单的命令是:ps -o rss,vsz,pid。该命令输出进程占用的物理内存、虚拟内存和进程ID。 - kenorb
请注意,如果您正在使用此方法以编程方式获取内存,则调用ps非常昂贵。 https://github.com/schneems/get_process_mem/issues/31 - Schneems

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;
  }
}

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

1
非常感谢您!这里的代码返回当前进程的信息。您知道如何在Mac上检索不同PID的驻留集大小吗? - Schneems

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接