使用SetInformationJobObject通过Job限制进程内存失效问题
问题:Job对象内存限制设置无生效问题
我正在编写一个简单程序,功能是接收进程ID(PID),通过Job对象限制该进程的内存使用。目前调用SetInformationJobObject()没有报错,但内存限制完全没生效。我用SysInternals工具集里的testlimit64.exe -d 2024 -c 1做测试,已经确认Job成功绑定到目标进程(调用TerminateJobObject()可以终止该进程)。
以下是我的代码:
#include <windows.h> #include <stdio.h> int main(void) { DWORD pid; HANDLE hJob = CreateJobObject(NULL, NULL); printf("Type in PID\n"); scanf_s("%u",&pid); HANDLE hProc = OpenProcess(PROCESS_SET_QUOTA | PROCESS_TERMINATE,FALSE, pid); if (!hJob) { printf("Failed to create job, GetLastError() = %d\n",GetLastError()); return 1; } if (!hProc) { printf("Failed to OpenProcess, GetLastError() = %d\n", GetLastError()); return 1; } if (!AssignProcessToJobObject(hJob,hProc)) { printf("Failed to AssignProcessToJobObject, GetLastError() = %d\n", GetLastError()); return 1; } JOBOBJECT_EXTENDED_LIMIT_INFORMATION info; info.BasicLimitInformation.LimitFlags = JOB_OBJECT_LIMIT_JOB_MEMORY; info.JobMemoryLimit = 536870912;//尝试设置为512MB if (!SetInformationJobObject(hJob, JobObjectExtendedLimitInformation, &info, sizeof(info))) { printf("Failed to SetInformationJobObject, GetLastError() = %d\n", GetLastError()); return 1; } else { printf("进程%d的内存已被限制!!!\n按ENTER键关闭程序",pid); getchar(); getchar(); } TerminateJobObject(hJob, 0); CloseHandle(hJob); CloseHandle(hProc); return EXIT_SUCCESS; }
我还尝试修改JOBOBJECT_EXTENDED_LIMIT_INFORMATION结构体的LimitFlags,如下设置依然没有效果:
info.BasicLimitInformation.LimitFlags = JOB_OBJECT_LIMIT_PROCESS_MEMORY; info.ProcessMemoryLimit = 536870912;//尝试设置为512MB
内容的提问来源于stack exchange,提问作者user2494337
相关产品推荐
相关产品推荐

