AssignProcessToJobObject 함수(jobapi2.h)
기존 작업 개체에 프로세스를 할당합니다.
구문
BOOL AssignProcessToJobObject(
[in] HANDLE hJob,
[in] HANDLE hProcess
);
매개 변수
[in] hJob
프로세스가 연결될 작업 개체에 대한 핸들입니다. CreateJobObject 또는 OpenJobObject 함수는 이 핸들을 반환합니다. 핸들에 JOB_OBJECT_ASSIGN_PROCESS 액세스 권한이 있어야 합니다. 자세한 내용은 작업 개체 보안 및 액세스 권한을 참조하세요.
[in] hProcess
작업 개체와 연결할 프로세스에 대한 핸들입니다. 핸들에는 PROCESS_SET_QUOTA 및 PROCESS_TERMINATE 액세스 권한이 있어야 합니다. 자세한 내용은 프로세스 보안 및 액세스 권한을 참조하세요.
프로세스가 이미 작업과 연결된 경우 hJob으로 지정된 작업이 비어 있거나 프로세스가 이미 속한 중첩된 작업의 계층 구조에 있어야 하며 UI 제한을 설정할 수 없습니다(JobObjectBasicUIRestrictions를 사용하는 SetInformationJobObject). 자세한 내용은 설명 부분을 참조하세요.
Windows 7, Windows Server 2008 R2, WINDOWS XP SP3, Windows Server 2008, Windows Vista 및 Windows Server 2003: 프로세스는 작업에 할당되지 않아야 합니다. 이 경우 함수는 ERROR_ACCESS_DENIED 함께 실패합니다. 이 동작은 Windows 8 및 Windows Server 2012부터 변경되었습니다.
터미널 서비스: 작업 내의 모든 프로세스는 작업과 동일한 세션 내에서 실행되어야 합니다.
반환 값
함수가 성공하면 반환 값이 0이 아닙니다.
함수가 실패하면 반환 값은 0입니다. 확장 오류 정보를 가져오려면 GetLastError를 호출합니다.
설명
AssignProcessToJobObject를 사용하여 프로세스를 작업 개체와 연결하면 프로세스에 대해 설정된 제한 사항이 적용됩니다. 작업에 대한 제한을 설정하려면 SetInformationJobObject 함수를 사용합니다.
작업에 사용자 모드 시간 제한이 있고 시간 제한이 소진된 경우 AssignProcessToJobObject 가 실패하고 지정된 프로세스가 종료됩니다. 프로세스를 연결하여 시간 제한을 초과하는 경우 AssignProcessToJobObject 는 여전히 성공합니다. 그러나 시간 제한 위반이 보고됩니다. 작업에 활성 프로세스 제한이 있고 이 프로세스를 연결하여 제한을 초과하면 AssignProcessToJobObject 가 실패하고 지정된 프로세스가 종료됩니다.
메모리 제한이 있는 작업과 연결된 프로세스에서 수행하는 메모리 작업에는 메모리 제한이 적용됩니다. 작업과 연결되기 전에 프로세스에서 수행한 메모리 작업은 AssignProcessToJobObject에서 검사되지 않습니다.
프로세스가 이미 실행 중이고 작업에 보안 제한이 있는 경우 AssignProcessToJobObject 가 실패할 수 있습니다. 예를 들어 프로세스의 기본 토큰에 로컬 관리자 그룹이 포함되어 있지만 작업 개체에 보안 제한 JOB_OBJECT_SECURITY_NO_ADMIN 있으면 함수가 실패합니다. 작업에 보안 제한 JOB_OBJECT_SECURITY_ONLY_TOKEN 있는 경우 프로세스를 일시 중단해야 합니다. 일시 중단된 프로세스를 만들려면 CREATE_SUSPENDED 플래그를 사용하여 CreateProcess 함수를 호출합니다.
프로세스는 중첩된 작업의 계층 구조에서 둘 이상의 작업과 연결할 수 있습니다. 우선 순위 클래스, 선호도, 커밋 요금, 프로세스별 실행 시간 제한, 예약 클래스 제한 및 작업 집합 최소 및 최대값의 경우 프로세스는 부모 작업 체인에 있는 모든 작업의 가장 제한적인 제한인 유효 제한을 상속합니다. 다른 리소스 제한의 경우 프로세스는 계층 구조의 즉각적인 작업에서 제한을 상속합니다. 회계 정보는 즉시 작업에 추가되고 작업 체인의 각 부모 작업에서 집계됩니다. 기본적으로 모든 자식 프로세스는 즉시 작업 및 부모 작업 체인의 모든 작업과 연결됩니다. 동일한 작업 체인에 속하지 않는 자식 프로세스를 만들려면 CREATE_BREAKAWAY_FROM_JOB 플래그를 사용하여 CreateProcess 함수를 호출합니다. 자식 프로세스는 체인의 작업이 중단을 허용하지 않는 한 작업 체인의 모든 작업에서 중단됩니다. 이 경우 자식 프로세스는 해당 작업 또는 작업 체인의 그 위에 있는 작업에서 벗어나지 않습니다. 자세한 내용은 중첩된 작업을 참조하세요.
Windows 7, Windows Server 2008 R2, WINDOWS XP SP3, Windows Server 2008, Windows Vista 및 Windows Server 2003: 프로세스는 단일 작업에만 연결할 수 있습니다. 프로세스는 연결된 작업에서 제한을 상속하고 해당 회계 정보를 작업에 추가합니다. 프로세스가 작업과 연결된 경우 생성되는 모든 자식 프로세스는 기본적으로 해당 작업과 연결됩니다. 동일한 작업의 일부가 아닌 자식 프로세스를 만들려면 CREATE_BREAKAWAY_FROM_JOB 플래그를 사용하여 CreateProcess 함수를 호출합니다. 프로세스는 Windows 8 및 Windows Server 2012부터 둘 이상의 작업과 연결할 수 있습니다.
Windows 7, Windows Server 2008 R2, Windows Server 2008 및 Windows Vista: PCA(프로그램 호환성 도우미)에서 프로세스를 모니터링하는 경우 호환성 작업에 배치됩니다. 따라서 프로세스를 다른 작업에 배치하려면 먼저 CREATE_BREAKAWAY_FROM_JOB 사용하여 만들어야 합니다. 또는 애플리케이션에 UAC(사용자 계정 컨트롤) 수준을 지정하는 애플리케이션 매니페스트를 포함할 수 있으며 PCA는 호환성 작업에 프로세스를 추가하지 않습니다. 자세한 내용은 사용자 계정 컨트롤 호환성을 위한 애플리케이션 개발 요구 사항을 참조하세요.
AssignProcessToJob을 호출할 때 작업 또는 작업 체인의 부모 작업이 종료되면 함수가 실패합니다.
이 함수를 사용하는 애플리케이션을 컴파일하려면 _WIN32_WINNT 0x0500 이상으로 정의합니다. 자세한 내용은 Windows 헤더 사용을 참조하세요.
요구 사항
지원되는 최소 클라이언트 | Windows XP [데스크톱 앱만 해당] |
지원되는 최소 서버 | Windows Server 2003 [데스크톱 앱만 해당] |
대상 플랫폼 | Windows |
헤더 | jobapi2.h(Windows.h 포함) |
라이브러리 | Kernel32.lib |
DLL | Kernel32.dll |