Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Macos mac os x下进程使用的内存_Macos_Cocoa_Memory_Pid - Fatal编程技术网

Macos mac os x下进程使用的内存

Macos mac os x下进程使用的内存,macos,cocoa,memory,pid,Macos,Cocoa,Memory,Pid,给定PID,如何获取进程当前使用的内存?具体而言,我正在寻找: 进程使用的专用物理内存(RAM) 进程使用的交换空间 但我对映射文件和共享内存不感兴趣。简而言之,我想确定通过终止PID将释放多少内存(RAM和交换)。这是否有用?您可以将ps命令与各种选项一起使用,以至少获得其中一些内容: ps -o rss -o vsz -o pid 将为您提供常驻集大小、虚拟大小和进程ID。我从man页面看到-o paddr提供交换地址,但我不知道哪个选项提供交换大小。您可以使用Mach的task\u

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

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

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

这是否有用?您可以将
ps
命令与各种选项一起使用,以至少获得其中一些内容:

ps -o rss -o vsz -o pid

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

您可以使用Mach的task\u 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;
  }
}
#包括
#包括//mach\U msg\U类型\U编号\U t
#包含//用于内核返回
#包括
#包括
内部主(空){
内核返回错误;
马赫数、型号、数量、数量;
机器任务基本信息数据任务信息;
taskinfo.virtual_size=0;
outCount=马赫数、任务数、基本信息数;
错误=任务信息(mach_task_self(),mach_task_BASIC_info,(task_info)&taskinfo,&outCount);
if(error==KERN_SUCCESS){
//类型为马赫数vm大小t
printf(“vsize=%llu\n”,(unsigned long-long)taskinfo.virtual\u size);
返回0;
}否则{
printf(“错误%d\n”,(int)错误);
返回1;
}
}

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

请看一看谢谢,但本文提到的工具在mac(/proc、pmap、smem、htop、gcore)上不可用,或者valgrind之类的工具也不可用。我主要在寻找一种方法,以编程方式查找进程使用的内存(RAM)和交换。PS可以工作,但它没有报告这一点。我应该标记objective-c而不是cocoa。但这不会更好。C/C++调用很好,只要它们可以放在MAC OS平台上。感谢您的回复。我相信这个命令会返回地址空间大小?RSS是否也包含共享/映射内存?(注意:
-p pid
)。或者更简单:
ps-o rss,vsz,pid
。如果您使用它以编程方式获取内存,那么使用
ps
非常昂贵,非常感谢!这里的代码返回当前进程的信息。您知道如何在mac上检索不同PID的常驻集大小吗?