다음을 통해 공유


중첩된 작업

애플리케이션은 중첩된 작업을 사용하여 프로세스의 하위 집합을 관리할 수 있습니다. 중첩된 작업을 사용하면 작업을 사용하여 작업도 사용하는 다른 애플리케이션을 호스트하는 애플리케이션도 사용할 수 있습니다.

Windows 7, Windows Server 2008 R2, WINDOWS XP SP3, Windows Server 2008, Windows Vista 및 Windows Server 2003: 프로세스는 단일 작업에만 연결할 수 있습니다. 중첩된 작업은 Windows 8 및 Windows Server 2012 도입되었습니다.

이 항목에서는 중첩된 작업의 작업 중첩 및 동작에 대한 개요를 제공합니다.

작업 및 작업 개체에 대한 일반적인 내용은 작업 개체를 참조하세요.

중첩된 작업 계층

중첩된 작업에는 부모 작업에서 각 자식 작업에 프로세스의 하위 집합이 포함된 부모-자식 관계가 있습니다. 이미 작업에 있는 프로세스가 다른 작업에 추가되면 시스템이 유효한 작업 계층 구조를 구성할 수 있고 두 작업 모두 UI 제한을 설정하지 않으면 기본적으로 작업이 중첩됩니다(JobObjectBasicUIRestrictions를 사용하는 SetInformationJobObject).

그림 1은 P0~P7이라는 레이블이 지정된 프로세스 트리를 포함하는 작업 계층 구조를 보여 줍니다. 작업 1은 작업 2 및 작업 4의 부모 작업 이며 작업 3의 상위 작업입니다. 작업 2는 작업 3의 직함 부모 입니다. 작업 3은 작업 2의 직할 자식 입니다. 작업 1, 2 및 3은 작업 1과 2가 작업 3의 부모 작업 체인인 작업 체인 을 형성합니다. 작업 체인의 최종 작업은 해당 작업의 프로세스에 대한 즉각적인 작업 입니다. 그림 1에서 작업 3은 프로세스 P2, P3 및 P4의 즉각적인 작업입니다.

그림 1. 프로세스 트리를 포함하는 중첩된 작업 계층 구조

중첩된 작업을 사용하여 피어 프로세스 그룹을 관리할 수도 있습니다. 그림 2에 표시된 작업 계층 구조에서 작업 1은 작업 2의 부모 작업입니다. 작업 계층 구조에는 프로세스 트리의 일부만 포함될 수 있습니다. 그림 2에서 P0은 계층 구조에 없지만 P1에서 P5까지의 자식 프로세스는 입니다.

그림 2. 피어 프로세스를 포함하는 중첩된 작업 계층 구조

중첩된 작업 계층 구조 만들기

작업 계층 구조의 프로세스는 AssignProcessToJobObject 함수를 사용하여 작업 개체와 명시적으로 연결되거나 독립 실행형 작업과 동일하게 프로세스 생성 중에 암시적으로 연결됩니다. 작업이 생성되고 프로세스가 할당되는 순서는 계층을 만들 수 있는지 여부를 결정합니다.

명시적 연결을 사용하여 작업 계층 구조를 빌드하려면 CreateJobObject를 사용하여 모든 작업 개체를 만들어야 합니다. 그런 다음, 각 프로세스가 해당 프로세스를 속여야 하는 각 작업과 연결하기 위해 AssignProcessToJobObject 를 여러 번 호출해야 합니다. 작업 계층이 유효한지 확인하려면 먼저 계층 구조의 루트에 있는 작업에 모든 프로세스를 할당한 다음, 직접 자식 작업 개체에 프로세스 하위 집합을 할당합니다. 프로세스가 이 순서대로 작업에 할당된 경우 계층이 만들어지는 동안 자식 작업에는 항상 부모 작업의 프로세스 하위 집합이 포함됩니다. 이 하위 집합은 중첩에 필요합니다. 프로세스가 임의 순서로 작업에 할당되는 경우 어떤 시점에서 자식 작업에는 부모 작업에 없는 프로세스가 있습니다. 이 작업은 중첩할 수 없으며 AssignProcessToJobObject 가 실패합니다.

프로세스를 만드는 동안 프로세스가 작업과 암시적으로 연결된 경우 자식 프로세스는 부모 프로세스의 작업 체인에 있는 모든 작업과 연결됩니다. 즉시 작업 개체에서 중단을 허용하는 경우 자식 프로세스는 즉시 작업 개체와 부모 작업 체인의 각 작업에서 분리되어 중단을 허용하지 않는 작업에 도달할 때까지 계층 구조를 이동합니다. 직접 작업 개체가 중단을 허용하지 않는 경우 부모 작업 체인의 작업에서 허용하는 경우에도 자식 프로세스가 중단되지 않습니다.

중첩된 작업에 대한 작업 제한 및 알림

특정 리소스 제한의 경우 부모 작업 체인의 작업에 대해 설정된 제한은 자식 작업에 적용되는 유효 제한을 결정합니다. 자식 작업에 대한 유효 한도는 부모의 제한보다 더 제한적일 수 있지만 덜 제한적일 수는 없습니다. 예를 들어 자식 작업의 우선 순위 클래스가 ABOVE_NORMAL_PRIORITY_CLASS 부모 작업의 우선 순위 클래스가 NORMAL_PRIORITY_CLASS 경우 자식 작업의 프로세스에 대한 유효 한도는 NORMAL_PRIORITY_CLASS. 그러나 자식 작업의 우선 순위 클래스가 BELOW_NORMAL_PRIORITY_CLASS 경우 자식 작업의 프로세스에 대한 유효 한도는 BELOW_NORMAL_PRIORITY_CLASS. 우선 순위 클래스, 선호도, 커밋 요금, 프로세스별 실행 시간 제한, 일정 클래스 제한 및 작업 집합 최소 및 최대값에 대해 유효 한도가 적용됩니다. 특정 리소스 제한에 대한 자세한 내용은 SetInformationJobObject를 참조하세요.

새 프로세스 만들기 또는 리소스 제한 위반과 같은 특정 이벤트가 발생하면 작업과 연결된 I/O 완료 포트로 메시지가 전송됩니다. 특정 제한을 초과할 때 작업을 등록하여 알림을 받을 수도 있습니다. 중첩되지 않은 작업의 경우 메시지는 작업과 연결된 I/O 완료 포트로 전송됩니다. 중첩 작업의 경우 메시지를 트리거한 작업의 부모 작업 체인에 있는 모든 작업과 연결된 모든 I/O 완료 포트로 메시지가 전송됩니다. 자식 작업에는 작업 체인에서 상위 작업의 I/O 완료 포트로 전송되도록 트리거하는 메시지에 대한 연결된 I/O 완료 포트가 필요하지 않습니다. 특정 메시지에 대한 자세한 내용은 JOBOBJECT_ASSOCIATE_COMPLETION_PORT 참조하세요.

중첩된 작업에 대한 리소스 계정

중첩된 작업에 대한 리소스 회계 정보는 자식 작업의 프로세스를 포함하여 해당 작업과 연결된 모든 프로세스의 사용을 설명합니다. 따라서 작업 체인의 각 작업은 자체 프로세스에서 사용하는 집계된 리소스와 작업 체인에 있는 모든 자식 작업의 프로세스를 나타냅니다.

중첩된 작업 종료

작업 계층 구조의 작업이 종료되면 시스템은 계층의 맨 아래에 있는 자식 작업부터 시작하여 해당 작업 및 모든 자식 작업의 프로세스를 종료합니다. 종료된 각 프로세스에서 사용되는 미해결 리소스는 부모 작업에 청구됩니다.

작업 핸들에는 독립 실행형 작업과 동일한 JOB_OBJECT_TERMINATE 액세스 권한이 있어야 합니다.