给定一个 PID,我如何获取进程当前使用的内存?具体地说,我要找:
- 进程使用的私有物理内存(RAM)
- 进程使用的交换空间
但我对映射文件和共享内存不感兴趣。简而言之,我想确定终止 PID 可以释放多少内存(RAM 和交换空间)。
给定一个 PID,我如何获取进程当前使用的内存?具体地说,我要找:
但我对映射文件和共享内存不感兴趣。简而言之,我想确定终止 PID 可以释放多少内存(RAM 和交换空间)。
这个有用吗?你可以使用ps
命令和不同的选项来获取至少一些这些东西:
ps -o rss -o vsz -o pid
这将会给你进程的驻留集大小、虚拟大小和进程 ID。从 man
页面中可以看到 -o paddr
可以给出交换地址,但我没有看到哪个选项可以给出交换大小。
-p pid
)。 - user2205231ps -o rss,vsz,pid
。该命令输出进程占用的物理内存、虚拟内存和进程ID。 - kenorbps
非常昂贵。 https://github.com/schneems/get_process_mem/issues/31 - Schneems#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;
}
}