1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > Windows和Mac下获取(当前)进程内存占用

Windows和Mac下获取(当前)进程内存占用

时间:2022-09-18 05:17:02

相关推荐

Windows和Mac下获取(当前)进程内存占用

Windows下获取进程内存占用

#include <process.h>using namespace std;QString getProcessMemory(){QProcess p;int PIDNum = getpid();p.start("tasklist /FI \"PID EQ " + QString::number(PIDNum) + " \"");p.waitForFinished();QString result = QString::fromLocal8Bit(p.readAllStandardOutput());int lastKIndex = result.lastIndexOf(' ');QString tempProcessMem;while(result[lastKIndex-1].toLatin1() != ' '){tempProcessMem += result[lastKIndex-1].toLatin1();--lastKIndex;if(lastKIndex < 0){break;}}reverse(tempProcessMem.begin(), tempProcessMem.end());tempProcessMem.remove(',');return QString::number(tempProcessMem.toDouble() / 1024.0, 'f', 2);}

mac下获取进程内存占用

​#include <assert.h>#include <sys/types.h>#include <sys/sysctl.h>#include <sys/vmmeter.h>#include <mach/mach.h>#include <mach/mach_init.h>#include <mach/mach_host.h>#include <mach/mach_port.h>#include <mach/mach_traps.h>#include <mach/task_info.h>#include <mach/thread_info.h>#include <mach/thread_act.h>#include <mach/vm_region.h>#include <mach/vm_map.h>#include <mach/task.h>// #include <mach/shared_memory_server.h>#include <mach/shared_region.h>#include <iostream>#include <vector>#include <string>#include <unistd.h>#include <QDebug>typedef struct vmtotal vmtotal_t;typedef struct { /* dynamic process information */size_t rss, vsize;double utime, stime;} RunProcDyn;int runGetDynamicProcInfo(pid_t pid, RunProcDyn *rpd){task_t task;kern_return_t error;mach_msg_type_number_t count;thread_array_t thread_table;thread_basic_info_t thi;thread_basic_info_data_t thi_data;unsigned table_size;struct task_basic_info ti;error = task_for_pid(mach_task_self(), pid, &task);if (error != KERN_SUCCESS) {/* fprintf(stderr, "++ Probably you have to set suid or become root.\n"); */rpd->rss = rpd->vsize = 0;rpd->utime = rpd->stime = 0;return 0;}count = TASK_BASIC_INFO_COUNT;error = task_info(task, TASK_BASIC_INFO, (task_info_t)&ti, &count);assert(error == KERN_SUCCESS);{ /* adapted from ps/tasks.c */vm_region_basic_info_data_64_t b_info;vm_address_t address = SHARED_REGION_BASE_PPC;vm_size_t size;mach_port_t object_name;count = VM_REGION_BASIC_INFO_COUNT_64;error = vm_region_64(task, &address, &size, VM_REGION_BASIC_INFO,(vm_region_info_t)&b_info, &count, &object_name);if (error == KERN_SUCCESS) {if (b_info.reserved && size == (SHARED_REGION_NESTING_SIZE_PPC) &&ti.virtual_size > (SHARED_REGION_NESTING_SIZE_PPC + SHARED_REGION_NESTING_MIN_PPC)){ti.virtual_size -= (SHARED_REGION_NESTING_SIZE_PPC + SHARED_REGION_NESTING_MIN_PPC);}}rpd->rss = ti.resident_size;rpd->vsize = ti.virtual_size;}{ /* calculate CPU times, adapted from top/libtop.c */unsigned i;rpd->utime = ti.user_time.seconds + ti.user_time.microseconds * 1e-6;rpd->stime = ti.system_time.seconds + ti.system_time.microseconds * 1e-6;error = task_threads(task, &thread_table, &table_size);assert(error == KERN_SUCCESS);thi = &thi_data;for (i = 0; i != table_size; ++i) {count = THREAD_BASIC_INFO_COUNT;error = thread_info(thread_table[i], THREAD_BASIC_INFO, (thread_info_t)thi, &count);assert(error == KERN_SUCCESS);if ((thi->flags & TH_FLAGS_IDLE) == 0) {rpd->utime += thi->user_time.seconds + thi->user_time.microseconds * 1e-6;rpd->stime += thi->system_time.seconds + thi->system_time.microseconds * 1e-6;}if (task != mach_task_self()) {error = mach_port_deallocate(mach_task_self(), thread_table[i]);assert(error == KERN_SUCCESS);}}error = vm_deallocate(mach_task_self(), (vm_offset_t)thread_table, table_size * sizeof(thread_array_t));assert(error == KERN_SUCCESS);}mach_port_deallocate(mach_task_self(), task);return 0;}//获取mac进程内存占用QString getProcessMemory(){int pid = getpid();RunProcDyn rpd;runGetDynamicProcInfo(pid, &rpd);return QString::number(rpd.rss/1024.0/1024.0, 'f', 2);}​

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。