JOBOBJECT_ASSOCIATE_COMPLETION_PORT 구조체(winnt.h)
완료 포트를 작업과 연결하는 데 사용되는 정보를 포함합니다. 하나의 완료 포트를 작업과 연결할 수 있습니다.
통사론
typedef struct _JOBOBJECT_ASSOCIATE_COMPLETION_PORT {
PVOID CompletionKey;
HANDLE CompletionPort;
} JOBOBJECT_ASSOCIATE_COMPLETION_PORT, *PJOBOBJECT_ASSOCIATE_COMPLETION_PORT;
회원
CompletionKey
PostQueuedCompletionStatus의 dwCompletionKey 매개 변수에 사용할 값은 작업을 대신하여 메시지를 보낼 때.
CompletionPort
작업을 대신하여 메시지를 보낼 때 PostQueuedCompletionStatus 함수의 CompletionPort 매개 변수에 사용할 완료 포트입니다.
Windows 8 이상 Windows Server 2012 이상:NULL 지정하여 현재 완료 포트와 작업 간의 연결을 제거합니다.
발언
시스템은 특정 이벤트가 발생할 때 작업과 연결된 I/O 완료 포트로 메시지를 보냅니다. 작업이 중첩된 경우 메시지는 메시지를 트리거한 작업의 부모 작업 체인에 있는 모든 작업과 연결된 모든 I/O 완료 포트로 전송됩니다. 모든 메시지는 작업이 PostQueuedCompletionStatus 함수를 호출한 것처럼 작업에서 직접 전송됩니다.
JobObjectNotificationLimitInformation 정보 클래스로 설정된 제한을 제외하고 메시지는 알림으로만 의도되고 완료 포트에 배달되는 것은 보장되지 않습니다. 완료 포트에 메시지가 도착하지 않는다고 해서 반드시 이벤트가 발생하지 않았다는 의미는 아닙니다. JobObjectNotificationLimitInformation 설정된 제한에 대한 알림은 완료 포트에 도착하도록 보장됩니다.
스레드는 GetQueuedCompletionStatus 함수를 사용하여 완료 포트를 모니터링하여 메시지를 선택해야 합니다. 스레드는 다음 표에 표시된 GetQueuedCompletionStatus 매개 변수의 정보를 받습니다.
매개 변수 | 받은 정보 |
---|---|
lpCompletionKey | 완료 포트 연결 중에 CompletionKey 지정된 값입니다. 완료 포트가 여러 작업과 연결된 경우 CompletionKey 호출자가 메시지를 보내는 완료 포트를 결정하는 데 도움이 됩니다. |
lpOverlapped |
메시지별 값입니다. 자세한 내용은 다음 메시지 식별자 표를 참조하세요. |
LpNumberOfBytes | 발생한 작업 관련 이벤트를 나타내는 메시지 식별자입니다. 자세한 내용은 다음 메시지 식별자 표를 참조하세요. |
다음 메시지를 완료 포트로 보낼 수 있습니다. 프로세스 식별자를 반환하는 메시지의 경우 프로세스에 대한 열린 핸들을 유지하지 않는 한 이 프로세스가 여전히 활성 상태이거나 식별자가 재활용되지 않았다는 것을 보장할 수 없습니다(종료 후 새 프로세스에 할당됨).
메시지 식별자 | 묘사 |
---|---|
JOB_OBJECT_MSG_ABNORMAL_EXIT_PROCESS |
작업과 연결된 프로세스가 비정상적인 종료를 나타내는 종료 코드로 종료되었음을 나타냅니다(이 표 다음 목록 참조).
lpOverlapped 값은 종료 프로세스의 식별자입니다. |
JOB_OBJECT_MSG_ACTIVE_PROCESS_LIMIT |
활성 프로세스 제한이 초과되었음을 나타냅니다.
lpOverlapped 값은 NULL입니다. |
JOB_OBJECT_MSG_ACTIVE_PROCESS_ZERO |
활성 프로세스 수가 0으로 감소했음을 나타냅니다. 예를 들어 작업에 현재 두 개의 활성 프로세스가 있는 경우 두 프로세스가 모두 종료된 후 시스템에서 이 메시지를 보냅니다.
lpOverlapped 값은 NULL입니다. |
JOB_OBJECT_MSG_END_OF_JOB_TIME |
JOB_OBJECT_POST_AT_END_OF_JOB 옵션이 적용되고 작업 종료 시간 제한에 도달했음을 나타냅니다. 이 메시지를 게시하면 시간 제한이 취소되고 작업의 프로세스가 계속 실행될 수 있습니다.
lpOverlapped 값은 NULL입니다. |
JOB_OBJECT_MSG_END_OF_PROCESS_TIME |
프로세스가 프로세스당 시간 제한을 초과했음을 나타냅니다. 시스템은 프로세스 종료가 요청된 후 이 메시지를 보냅니다.
lpOverlapped 값은 해당 제한을 초과한 프로세스의 식별자입니다. |
JOB_OBJECT_MSG_EXIT_PROCESS |
작업과 연결된 프로세스가 종료되었음을 나타냅니다.
lpOverlapped 값은 종료 프로세스의 식별자입니다. |
JOB_OBJECT_MSG_JOB_MEMORY_LIMIT |
작업과 연결된 프로세스로 인해 작업이 작업 전체 메모리 제한을 초과했음을 나타냅니다(적용 중인 경우).
lpOverlapped 값은 제한을 초과하려고 시도한 프로세스의 식별자를 지정합니다. 프로세스에서 프로세스 식별자를 아직 보고하지 않은 경우 시스템에서 이 메시지를 보내지 않습니다. |
JOB_OBJECT_MSG_NEW_PROCESS |
프로세스가 작업에 추가되었음을 나타냅니다. 완료 포트가 연결될 때 작업에 추가된 프로세스도 보고됩니다.
lpOverlapped 값은 작업에 추가된 프로세스의 식별자입니다. |
JOB_OBJECT_MSG_NOTIFICATION_LIMIT |
리소스 제한 알림에 등록된 작업과 연결된 프로세스가 하나 이상의 제한을 초과했음을 나타냅니다. JobObjectLimitViolationInformation과 함께 QueryInformationJobObject 함수를 사용하여 초과된 제한을 확인합니다.
lpOverlapped 값은 해당 제한을 초과한 프로세스의 식별자입니다. 프로세스에서 프로세스 식별자를 아직 보고하지 않은 경우 시스템에서 이 메시지를 보내지 않습니다. |
JOB_OBJECT_MSG_PROCESS_MEMORY_LIMIT |
작업과 연결된 프로세스가 메모리 제한을 초과했음을 나타냅니다(적용 중인 경우).
lpOverlapped 값은 해당 제한을 초과한 프로세스의 식별자입니다. 프로세스에서 프로세스 식별자를 아직 보고하지 않은 경우 시스템에서 이 메시지를 보내지 않습니다. |
다음 종료 코드는 비정상적인 종료를 나타냅니다.
경합 상태가 발생할 수 있으므로 JOB_OBJECT_MSG_NEW_PROCESS 및 JOB_OBJECT_MSG_EXIT_PROCESS 메시지를 사용할 때는 주의해야 합니다. 예를 들어 프로세스가 작업 내에서 적극적으로 시작 및 종료되고 완료 포트를 작업에 할당하는 중이면 완료 포트 연결 중에 상태가 변경되는 프로세스에 대한 메시지가 누락될 수 있습니다. 이러한 이유로 작업이 비활성 상태일 때 완료 포트를 작업과 연결하는 것이 가장 좋습니다.
요구 사항
요구 | 값 |
---|---|
지원되는 최소 클라이언트 | Windows XP [데스크톱 앱만 해당] |
지원되는 최소 서버 | Windows Server 2003 [데스크톱 앱만 해당] |
헤더 | winnt.h(Windows.h 포함) |
참고 항목
QueryInformationJobObject
SetInformationJobObject