다음을 통해 공유


JOBOBJECT_BASIC_LIMIT_INFORMATION 구조체(winnt.h)

작업 개체에 대한 기본 제한 정보를 포함합니다.

구문

typedef struct _JOBOBJECT_BASIC_LIMIT_INFORMATION {
  LARGE_INTEGER PerProcessUserTimeLimit;
  LARGE_INTEGER PerJobUserTimeLimit;
  DWORD         LimitFlags;
  SIZE_T        MinimumWorkingSetSize;
  SIZE_T        MaximumWorkingSetSize;
  DWORD         ActiveProcessLimit;
  ULONG_PTR     Affinity;
  DWORD         PriorityClass;
  DWORD         SchedulingClass;
} JOBOBJECT_BASIC_LIMIT_INFORMATION, *PJOBOBJECT_BASIC_LIMIT_INFORMATION;

멤버

PerProcessUserTimeLimit

LimitFlagsJOB_OBJECT_LIMIT_PROCESS_TIME 지정하는 경우 이 멤버는 프로세스별 사용자 모드 실행 시간 제한(100나노초 틱)입니다. 그렇지 않으면 이 멤버는 무시됩니다.

시스템은 주기적으로 작업과 연결된 각 프로세스가 설정된 제한보다 더 많은 사용자 모드 시간을 누적했는지 여부를 확인합니다. 있는 경우 프로세스가 종료됩니다.

작업이 중첩된 경우 유효 한도는 작업 체인에서 가장 제한적인 제한입니다.

PerJobUserTimeLimit

LimitFlagsJOB_OBJECT_LIMIT_JOB_TIME 지정하는 경우 이 멤버는 100나노초 틱 단위의 작업별 사용자 모드 실행 시간 제한입니다. 그렇지 않으면 이 멤버는 무시됩니다.

시스템은 작업과 연결된 프로세스의 현재 시간을 이 제한에 추가합니다. 예를 들어 이 제한을 1분으로 설정하고 작업에 5분의 사용자 모드 시간이 누적된 프로세스가 있는 경우 실제로 적용되는 제한은 6분입니다.

시스템은 주기적으로 모든 프로세스에 대한 사용자 모드 실행 시간의 합계가 이 작업 종료 제한보다 큰지 여부를 확인합니다. 이 경우 JOBOBJECT_END_OF_JOB_TIME_INFORMATION 구조체의 EndOfJobTimeAction 멤버에 지정된 작업이 수행됩니다. 기본적으로 모든 프로세스가 종료되고 상태 코드가 ERROR_NOT_ENOUGH_QUOTA 설정됩니다.

프로세스를 종료하지 않고 이 제한을 초과할 때 알림을 등록하려면 JobObjectNotificationLimitInformation 정보 클래스와 함께 SetInformationJobObject 함수를 사용합니다.

LimitFlags

적용되는 제한 플래그입니다. 이 멤버는 다른 구조체 멤버가 사용되는지 여부를 결정하는 비트 필드입니다. 다음 값의 조합을 지정할 수 있습니다.

의미
JOB_OBJECT_LIMIT_ACTIVE_PROCESS
0x00000008
작업과 연결된 최대 동시 활성 프로세스 수를 설정합니다. ActiveProcessLimit 멤버에는 추가 정보가 포함됩니다.
JOB_OBJECT_LIMIT_AFFINITY
0x00000010
작업과 연결된 모든 프로세스가 동일한 프로세서 선호도를 사용하도록 합니다. 선호도 멤버에는 추가 정보가 포함됩니다.

작업이 중첩된 경우 지정된 프로세서 선호도는 부모 작업의 유효 선호도 하위 집합이어야 합니다. 지정된 선호도가 부모 작업의 선호도 상위 집합인 경우 무시되고 부모 작업의 선호도가 사용됩니다.

JOB_OBJECT_LIMIT_BREAKAWAY_OK
0x00000800
이 제한이 적용되는 동안 작업과 연결된 프로세스가 CREATE_BREAKAWAY_FROM_JOB 플래그를 사용하여 자식 프로세스를 만드는 경우 자식 프로세스는 작업과 연결되지 않습니다.

이 제한을 사용하려면 JOBOBJECT_EXTENDED_LIMIT_INFORMATION 구조를 사용해야 합니다. BasicLimitInformation 멤버는 JOBOBJECT_BASIC_LIMIT_INFORMATION 구조체입니다.

JOB_OBJECT_LIMIT_DIE_ON_UNHANDLED_EXCEPTION
0x00000400
작업과 연결된 각 프로세스에 대해 SEM_NOGPFAULTERRORBOX 플래그를 사용하여 SetErrorMode 함수를 강제로 호출합니다.

예외가 발생하고 시스템에서 UnhandledExceptionFilter 함수를 호출하는 경우 디버거가 작동할 수 있는 기회가 제공됩니다. 디버거가 없으면 함수는 EXCEPTION_EXECUTE_HANDLER 반환합니다. 일반적으로 종료 상태 예외 코드를 사용하여 프로세스가 종료됩니다.

이 제한을 사용하려면 JOBOBJECT_EXTENDED_LIMIT_INFORMATION 구조를 사용해야 합니다. BasicLimitInformation 멤버는 JOBOBJECT_BASIC_LIMIT_INFORMATION 구조체입니다.

JOB_OBJECT_LIMIT_JOB_MEMORY
0x00000200
작업과 연결된 모든 프로세스가 커밋된 메모리의 작업 전체 합계를 제한하도록 합니다. 프로세스에서 작업 전체 제한을 초과하는 메모리를 커밋하려고 하면 실패합니다. 작업 개체가 완료 포트와 연결된 경우 JOB_OBJECT_MSG_JOB_MEMORY_LIMIT 메시지가 완료 포트로 전송됩니다.

이 제한을 사용하려면 JOBOBJECT_EXTENDED_LIMIT_INFORMATION 구조를 사용해야 합니다. BasicLimitInformation 멤버는 JOBOBJECT_BASIC_LIMIT_INFORMATION 구조체입니다.

프로세스가 메모리를 계속 커밋할 수 있도록 허용하면서 이 제한을 초과할 때 알림을 등록하려면 JobObjectNotificationLimitInformation 정보 클래스와 함께 SetInformationJobObject 함수를 사용합니다.

JOB_OBJECT_LIMIT_JOB_TIME
0x00000004
작업에 대한 사용자 모드 실행 시간 제한을 설정합니다. PerJobUserTimeLimit 멤버에는 추가 정보가 포함됩니다. 이 플래그는 JOB_OBJECT_LIMIT_PRESERVE_JOB_TIME 사용할 수 없습니다.
JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE
0x00002000
작업에 대한 마지막 핸들이 닫혀 있을 때 작업과 연결된 모든 프로세스가 종료되도록 합니다.

이 제한을 사용하려면 JOBOBJECT_EXTENDED_LIMIT_INFORMATION 구조를 사용해야 합니다. BasicLimitInformation 멤버는 JOBOBJECT_BASIC_LIMIT_INFORMATION 구조체입니다.

JOB_OBJECT_LIMIT_PRESERVE_JOB_TIME
0x00000040
이전에 설정한 작업 시간 제한을 유지합니다. 이 플래그가 설정된 한 작업당 시간 제한을 한 번 설정한 다음 후속 호출에서 다른 제한을 변경할 수 있습니다. 이 플래그는 JOB_OBJECT_LIMIT_JOB_TIME 사용할 수 없습니다.
JOB_OBJECT_LIMIT_PRIORITY_CLASS
0x00000020
작업과 연결된 모든 프로세스가 동일한 우선 순위 클래스를 사용하도록 합니다. 자세한 내용은 예약 우선 순위를 참조하세요. PriorityClass 멤버에는 추가 정보가 포함됩니다.

작업이 중첩된 경우 유효 우선 순위 클래스는 작업 체인에서 가장 낮은 우선 순위 클래스입니다.

JOB_OBJECT_LIMIT_PROCESS_MEMORY
0x00000100
작업과 연결된 모든 프로세스가 커밋된 메모리를 제한하도록 합니다. 프로세스가 프로세스당 제한을 초과하는 메모리를 커밋하려고 하면 실패합니다. 작업 개체가 완료 포트와 연결된 경우 JOB_OBJECT_MSG_PROCESS_MEMORY_LIMIT 메시지가 완료 포트로 전송됩니다.

작업이 중첩된 경우 유효 메모리 제한은 작업 체인에서 가장 제한적인 메모리 제한입니다.

이 제한을 사용하려면 JOBOBJECT_EXTENDED_LIMIT_INFORMATION 구조를 사용해야 합니다. BasicLimitInformation 멤버는 JOBOBJECT_BASIC_LIMIT_INFORMATION 구조체입니다.

JOB_OBJECT_LIMIT_PROCESS_TIME
0x00000002
현재 활성화된 각 프로세스 및 작업과 연결된 모든 이후 프로세스에 대해 사용자 모드 실행 시간 제한을 설정합니다. PerProcessUserTimeLimit 멤버에는 추가 정보가 포함됩니다.
JOB_OBJECT_LIMIT_SCHEDULING_CLASS
0x00000080
작업의 모든 프로세스가 동일한 일정 클래스를 사용하도록 합니다. SchedulingClass 멤버에는 추가 정보가 포함됩니다.

작업이 중첩된 경우 유효 일정 예약 클래스는 작업 체인에서 가장 낮은 일정 클래스입니다.

JOB_OBJECT_LIMIT_SILENT_BREAKAWAY_OK
0x00001000
작업과 연결된 모든 프로세스가 작업과 연결되지 않은 자식 프로세스를 만들 수 있도록 허용합니다.

작업이 중첩되고 해당 직계 작업 개체가 중단을 허용하는 경우 자식 프로세스는 즉시 작업 개체와 부모 작업 체인의 각 작업에서 분리되어 중단을 허용하지 않는 작업에 도달할 때까지 계층 구조를 위로 이동합니다. 즉시 작업 개체가 중단을 허용하지 않는 경우 부모 작업 체인의 작업이 허용하는 경우에도 자식 프로세스는 중단되지 않습니다.

이 제한을 사용하려면 JOBOBJECT_EXTENDED_LIMIT_INFORMATION 구조를 사용해야 합니다. BasicLimitInformation 멤버는 JOBOBJECT_BASIC_LIMIT_INFORMATION 구조체입니다.

JOB_OBJECT_LIMIT_SUBSET_AFFINITY
0x00004000
프로세스는 작업과 연결된 모든 프로세스에 프로세서 선호도의 하위 집합을 사용할 수 있습니다. 이 값은 JOB_OBJECT_LIMIT_AFFINITY 결합해야 합니다.

Windows Server 2008, Windows Vista, Windows Server 2003 및 Windows XP: 이 플래그는 Windows 7 및 Windows Server 2008 R2부터 지원됩니다.

JOB_OBJECT_LIMIT_WORKINGSET
0x00000001
작업과 연결된 모든 프로세스가 동일한 최소 및 최대 작업 집합 크기를 사용하도록 합니다. MinimumWorkingSetSizeMaximumWorkingSetSize 멤버에는 추가 정보가 포함되어 있습니다.

작업이 중첩된 경우 유효 작업 집합 크기는 작업 체인에서 가장 작은 작업 집합 크기입니다.

MinimumWorkingSetSize

LimitFlagsJOB_OBJECT_LIMIT_WORKINGSET 지정하는 경우 이 멤버는 작업과 연결된 각 프로세스에 대한 최소 작업 집합 크기(바이트)입니다. 그렇지 않으면 이 멤버는 무시됩니다.

MaximumWorkingSetSize가 0이 아닌 경우 MinimumWorkingSetSize는 0일 수 없습니다.

MaximumWorkingSetSize

LimitFlagsJOB_OBJECT_LIMIT_WORKINGSET 지정하는 경우 이 멤버는 작업과 연결된 각 프로세스에 대한 최대 작업 집합 크기(바이트)입니다. 그렇지 않으면 이 멤버는 무시됩니다.

MinimumWorkingSetSize가 0이 아닌 경우 MaximumWorkingSetSize는 0일 수 없습니다.

ActiveProcessLimit

LimitFlags가JOB_OBJECT_LIMIT_ACTIVE_PROCESS 지정하는 경우 이 멤버는 작업에 대한 활성 프로세스 제한입니다. 그렇지 않으면 이 멤버는 무시됩니다.

프로세스를 작업과 연결하려고 하면 활성 프로세스 수가 이 제한을 초과하면 프로세스가 종료되고 연결이 실패합니다.

Affinity

LimitFlags가JOB_OBJECT_LIMIT_AFFINITY 지정하는 경우 이 멤버는 작업과 연결된 모든 프로세스에 대한 프로세서 선호도입니다. 그렇지 않으면 이 멤버는 무시됩니다.

선호도는 GetProcessAffinityMask 함수를 호출하여 얻은 시스템 선호도 마스크의 하위 집합이어야 합니다. 각 스레드의 선호도는 이 값으로 설정되지만 스레드는 지정된 선호도 마스크의 하위 집합인 한 이후에 선호도를 설정할 수 있습니다. 프로세스는 자체 선호도 마스크를 설정할 수 없습니다.

PriorityClass

LimitFlags가JOB_OBJECT_LIMIT_PRIORITY_CLASS 지정하는 경우 이 멤버는 작업과 연결된 모든 프로세스의 우선 순위 클래스입니다. 그렇지 않으면 이 멤버는 무시됩니다.

프로세스와 스레드는 우선 순위 클래스를 수정할 수 없습니다. 호출 프로세스는 SE_INC_BASE_PRIORITY_NAME 권한을 사용하도록 설정해야 합니다.

SchedulingClass

LimitFlags가JOB_OBJECT_LIMIT_SCHEDULING_CLASS 지정하는 경우 이 멤버는 작업과 연결된 모든 프로세스에 대한 예약 클래스입니다. 그렇지 않으면 이 멤버는 무시됩니다.

유효한 값은 0~9입니다. 다른 스레드에 비해 가장 유리한 일정 지정 클래스에는 0을 사용하고 다른 스레드를 기준으로 가장 유리한 일정 예약 클래스에는 9를 사용합니다. 기본적으로 이 값은 5입니다. 5보다 큰 예약 클래스를 사용하려면 호출 프로세스에서 SE_INC_BASE_PRIORITY_NAME 권한을 사용하도록 설정해야 합니다.

설명

프로세스는 JOB_OBJECT_LIMIT_WORKINGSET 사용되는 경우에도 (SIZE_T)-1과 함께 SetProcessWorkingSetSize 함수를 사용하여 작업 집합을 비울 수 있습니다. 그러나 SetProcessWorkingSetSize 를 사용하면 작업 개체에서 프로세스의 최소 또는 최대 작업 집합 크기를 변경할 수 없습니다.

프로세스와 작업을 연결하려고 하면 시스템이 활성 프로세스 수를 증분합니다. 제한을 초과하는 경우 시스템은 프로세스가 종료되고 프로세스에 대한 모든 핸들이 닫힌 경우에만 활성 프로세스 수를 감소합니다. 따라서 이러한 방식으로 종료된 프로세스에 대한 열린 핸들이 있는 경우 핸들이 닫혀 활성 프로세스 수가 한도 미만이 될 때까지 새 프로세스를 연결할 수 없습니다.

요구 사항

   
지원되는 최소 클라이언트 Windows XP [데스크톱 앱만 해당]
지원되는 최소 서버 Windows Server 2003 [데스크톱 앱만 해당]
머리글 winnt.h(Windows.h 포함)

추가 정보

GetProcessAffinityMask

JOBOBJECT_END_OF_JOB_TIME_INFORMATION

JOBOBJECT_EXTENDED_LIMIT_INFORMATION

JOBOBJECT_NOTIFICATION_LIMIT_INFORMATION

QueryInformationJobObject

SetInformationJobObject

SetProcessWorkingSetSize