如何删除 Windows 作业对象的内存限制?

boot4life

我已经使用作业对象为我的进程配置了内存限制。现在我想取消那个限制。我假设我必须设置JOBOBJECT_EXTENDED_LIMIT_INFORMATION.ProcessMemoryLimit为特定值并调用SetInformationJobObject. 我应该使用什么值?这是无证的。

由于更改流程作业分配似乎有问题,因此不可能简单地脱离作业(至少在 Windows 7 上)。

对于上下文,这里有一些我正在使用的 C# 代码,但它似乎对问题无关紧要:

var limitInfo = new NativeMethods.JOBOBJECT_EXTENDED_LIMIT_INFORMATION()
{
    BasicLimitInformation = new NativeMethods.JOBOBJECT_BASIC_LIMIT_INFORMATION()
    {
        LimitFlags = NativeMethods.LimitFlags.JOB_OBJECT_LIMIT_PROCESS_MEMORY,
    },
    ProcessMemoryLimit = (UIntPtr)maxProcessMemoryBytes,
};

if (!NativeMethods.SetInformationJobObject(jobHandle, NativeMethods.JOBOBJECTINFOCLASS.JobObjectExtendedLimitInformation, (IntPtr)(&limitInfo), (uint)structSize))
    throw new Win32Exception();

0似乎被操作系统拒绝并-1导致:

在此处输入图片说明

-4KB作为限制。显然没有足够的验证。

泽特42

首先调用QueryInformationJobObject以获取当前限制和标志,JOB_OBJECT_LIMIT_PROCESS_MEMORY从中移除标志JOBOBJECT_EXTENDED_LIMIT_INFORMATION::BasicLimitInformation::LimitFlags,最后SetInformationJobObject()使用此数据调用以移除进程内存限制。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章