如何像Activity Monitor一样以编程方式检查Mac上的可用系统内存?

| 在Mac OS X上,我可以看到活动监视器中有多少可用内存。如何以编程方式执行此操作?     
已邀请:
这应该做。 Google围绕结构中字段的确切含义进行了围绕,但是使用此代码应该是不言而喻的。
#import <sys/sysctl.h>
#import <mach/host_info.h>
#import <mach/mach_host.h>
#import <mach/task_info.h>
#import <mach/task.h>
int mib[6]; 
mib[0] = CTL_HW;
mib[1] = HW_PAGESIZE;

int pagesize;
size_t length;
length = sizeof (pagesize);
if (sysctl (mib, 2, &pagesize, &length, NULL, 0) < 0)
{
    fprintf (stderr, \"getting page size\");
}

mach_msg_type_number_t count = HOST_VM_INFO_COUNT;

vm_statistics_data_t vmstat;
if (host_statistics (mach_host_self (), HOST_VM_INFO, (host_info_t) &vmstat, &count) != KERN_SUCCESS)
{
    fprintf (stderr, \"Failed to get VM statistics.\");
}

double total = vmstat.wire_count + vmstat.active_count + vmstat.inactive_count + vmstat.free_count;
double wired = vmstat.wire_count / total;
double active = vmstat.active_count / total;
double inactive = vmstat.inactive_count / total;
double free = vmstat.free_count / total;

task_basic_info_64_data_t info;
unsigned size = sizeof (info);
task_info (mach_task_self (), TASK_BASIC_INFO_64, (task_info_t) &info, &size);

double unit = 1024 * 1024;
memLabel.text = [NSString stringWithFormat: @\"% 3.1f MB\\n% 3.1f MB\\n% 3.1f MB\", vmstat.free_count * pagesize / unit, (vmstat.free_count + vmstat.inactive_count) * pagesize / unit, info.resident_size / unit];
    
实际上,这仅是一半。 free不是标准的UNIX,而是仅Linux的命令。您不会在BSD或OS X上找到它。 因此,获取内存信息的更好方法是通过sysctl。 即跑
sysctl -a | grep -Ei \"(hw|vm)\\..*mem\"
这样您就会知道。 要在C中以编程方式使用此功能,请参考man sysctlbyname。 另外,我看不到GNOME系统监视器如何在OS X上提供帮助。 df是一个很好的提示。 如果您只是打算使用shell收集这些数据并选择top,请阅读man top。您可以使用-l 1调用top以仅获取一个样本,并使用-n 20将进程表限制为20个进程。 请记住,仅使用示例就不会获得proc的CPU值,原因在手册页中有概述。 一个简单的示例,以获取有关内存的一些信息(仅用于整行):
top -l1 -n 20 | grep -Ei \"mem|vm\"
希望能有所帮助。     
在UNIX上执行此操作的常用命令是 df -h用于硬盘驱动器 免费用于RAM和交换 然后,您将使用/链接其中的一个或多个来提取给定的信息之一:ack,sed,grep,head,cut,... 注意:如果您不打算“以编程方式”检查内存,我建议您最好使用top来了解哪些进程正在使用您的CPU和RAM。 Gnome系统监视器是其GUI等效项之一。     

要回复问题请先登录注册