winnt.h) (JOBOBJECT_NOTIFICATION_LIMIT_INFORMATION 结构

包含有关作业对象的通知限制的信息。 此结构由具有 JobObjectNotificationLimitInformation 信息类的 SetInformationJobObjectQueryInformationJobObject 函数使用。

语法

typedef struct _JOBOBJECT_NOTIFICATION_LIMIT_INFORMATION {
  DWORD64                                   IoReadBytesLimit;
  DWORD64                                   IoWriteBytesLimit;
  LARGE_INTEGER                             PerJobUserTimeLimit;
  DWORD64                                   JobMemoryLimit;
  JOBOBJECT_RATE_CONTROL_TOLERANCE          RateControlTolerance;
  JOBOBJECT_RATE_CONTROL_TOLERANCE_INTERVAL RateControlToleranceInterval;
  DWORD                                     LimitFlags;
} JOBOBJECT_NOTIFICATION_LIMIT_INFORMATION, *PJOBOBJECT_NOTIFICATION_LIMIT_INFORMATION;

成员

IoReadBytesLimit

如果 LimitFlags 成员指定JOB_OBJECT_LIMIT_JOB_READ_BYTES,则此成员是作业中所有进程读取的总 I/O 字节数的通知限制。 否则,将忽略此成员。

IoWriteBytesLimit

如果 LimitFlags 参数指定JOB_OBJECT_LIMIT_JOB_WRITE_BYTES,则此成员是作业中所有进程写入的总 I/O 字节数的通知限制。 否则,将忽略此成员。

PerJobUserTimeLimit

如果 LimitFlags 参数指定JOB_OBJECT_LIMIT_JOB_TIME,则此成员是每个作业用户模式执行时间的通知限制,以 100 纳秒为单位。 否则,将忽略此成员。

设置限制时,系统会将与作业关联的进程的累计执行时间添加到此限制。 例如,如果与作业关联的进程已累积了 5 分钟的用户模式执行时间,并且限制设置为 1 分钟,则实际强制实施的限制为 6 分钟。

若要将 PerJobUserTimeLimit 指定为可强制限制并终止超出限制的作业中的进程,请参阅 JOBOBJECT_BASIC_LIMIT_INFORMATION 结构。

JobMemoryLimit

如果 LimitFlags 参数指定JOB_OBJECT_LIMIT_JOB_MEMORY,则此成员是作业中所有进程可提交的虚拟内存总量的通知限制(以字节为单位)。 否则,将忽略此成员。

若要将 JobMemoryLimit 指定为可强制执行的限制,并阻止作业中超出限制的进程继续提交内存,请参阅 JOBOBJECT_EXTENDED_LIMIT_INFORMATION 结构。

RateControlTolerance

如果 LimitFlags 参数指定JOB_OBJECT_LIMIT_RATE_CONTROL,则此成员指定作业在 RateControlToleranceInterval 成员指定的时间间隔内可能超过其 CPU 速率控制限制的程度。 否则,将忽略此成员。

此成员可以是以下值之一。 如果未指定任何值,则使用 ToleranceHigh

含义
ToleranceLow
1
作业在容错间隔的 20% 内可能会超过其 CPU 速率控制限制。
ToleranceMedium
2
作业在容错间隔的 40% 内可能会超过其 CPU 速率控制限制。
ToleranceHigh
3
作业在容错间隔的 60% 内可能会超过其 CPU 速率控制限制。

RateControlToleranceInterval

如果 LimitFlags 参数指定JOB_OBJECT_LIMIT_RATE_CONTROL,则此成员指定监视作业的 CPU 使用率以确定作业是否已超出其 CPU 速率控制限制的时间间隔。 否则,将忽略此成员。

此成员可以是以下值之一。 如果未指定任何值,则使用 ToleranceIntervalShort

含义
ToleranceIntervalShort
1
容差间隔为 10 秒。
ToleranceIntervalMedium
2
容错间隔为一分钟。
ToleranceIntervalLong
3
容错间隔为 10 分钟。

LimitFlags

生效的限制标志。 此成员是一个位域,用于确定是否使用其他结构成员。 可以指定以下值的任意组合。

含义
JOB_OBJECT_LIMIT_JOB_MEMORY
0x00000200
建立与作业关联的所有进程的已提交内存的作业范围总和的已提交内存限制。 JobMemoryLimit 成员包含其他信息。
JOB_OBJECT_LIMIT_JOB_READ_BYTES
0x00010000
建立与作业关联的所有进程读取的 I/O 字节数的作业范围的 I/O 读取字节数限制。 IoReadBytesLimit 成员包含详细信息。
JOB_OBJECT_LIMIT_JOB_WRITE_BYTES
0x00020000
建立与作业关联的所有进程写入的 I/O 字节数的作业范围 I/O 字节数的 I/O 写入字节数限制。 IoWriteBytesLimit 成员包含详细信息。
JOB_OBJECT_LIMIT_JOB_TIME
0x00000004
为作业建立用户模式执行时间限制。 PerJobUserTimeLimit 成员包含其他信息。
JOB_OBJECT_LIMIT_RATE_CONTROL
0x00040000
为作业建立的 CPU 速率控制限制的通知阈值。 RateControlToleranceRateControlToleranceInterval 成员包含其他信息。

CPU 速率控制限制是通过使用 JobObjectCpuRateInformationClass 信息类调用 SetInformationJobObject 建立的

注解

超过通知限制时,系统会向与作业关联的 I/O 完成端口发送JOB_OBJECT_MSG_NOTIFICATION_LIMIT消息。 作业中的进程将继续运行,并且可以继续分配内存或传输超出指定限制的读取或写入字节。

当监视 I/O 完成端口的应用程序收到JOB_OBJECT_MSG_NOTIFICATION_LIMIT消息时,它必须使用 JobObjectLimitViolationInformation 信息类调用 QueryInformationJobObject。 限制冲突信息在JOBOBJECT_LIMIT_VIOLATION_STRUCTURE中接收,其中包含有关查询时超出的所有通知限制的信息。 在调用 QueryInformationJobObject 之前,系统不会发送另一条JOB_OBJECT_MSG_NOTIFICATION_LIMIT消息。

作业的 CPU 速率控制限制是在 JOBOBJECT_CPU_RATE_CONTROL_INFORMATION 结构中建立的。 JOBOBJECT_NOTIFICATION_LIMIT_INFORMATION 结构中的 CPU 速率控制值指定在发送通知之前作业可以超出其已建立的 CPU 速率控制限制的量。

要求

要求
最低受支持的客户端 Windows 8 [仅限桌面应用]
最低受支持的服务器 Windows Server 2012 [仅限桌面应用]
标头 winnt.h

另请参阅

JOBOBJECT_CPU_RATE_CONTROL_INFORMATION

JOBOBJECT_LIMIT_VIOLATION_INFORMATION

QueryInformationJobObject

SetInformationJobObject