다음을 통해 공유


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

작업을 대신하여 메시지를 보낼 때 PostQueuedCompletionStatusdwCompletionKey 매개 변수에 사용할 값입니다.

CompletionPort

작업을 대신하여 메시지를 보낼 때 PostQueuedCompletionStatus 함수의 CompletionPort 매개 변수에 사용할 완료 포트입니다.

Windows 8, Windows Server 2012, Windows 8.1, Windows Server 2012 R2, Windows 10 및 Windows Server 2016: NULL을 지정하여 현재 간의 연결을 제거합니다. 완료 포트 및 작업.

설명

시스템은 특정 이벤트가 발생할 때 작업과 연결된 I/O 완료 포트로 메시지를 보냅니다. 작업이 중첩된 경우 메시지는 메시지를 트리거한 작업의 부모 작업 체인에 있는 모든 작업과 연결된 모든 I/O 완료 포트로 전송됩니다. 작업이 PostQueuedCompletionStatus 함수를 호출한 것처럼 모든 메시지가 작업에서 직접 전송됩니다.

JobObjectNotificationLimitInformation 정보 클래스로 설정된 제한을 제외하고 메시지는 알림으로만 의도되며 완료 포트에 배달되는 것은 보장되지 않습니다. 메시지가 완료 포트에 도착하지 못했다고 해서 반드시 이벤트가 발생하지 않았다는 의미는 아닙니다. JobObjectNotificationLimitInformation으로 설정된 제한에 대한 알림은 완료 포트에 도착하도록 보장됩니다.

스레드는 GetQueuedCompletionStatus 함수를 사용하여 완료 포트를 모니터링하여 메시지를 선택해야 합니다. 스레드는 다음 표에 표시된 GetQueuedCompletionStatus 매개 변수에서 정보를 받습니다.

매개 변수 받은 정보
lpCompletionKey 완료 포트 연결 중에 CompletionKey 에 지정된 값입니다. 완료 포트가 여러 작업과 연결된 경우 CompletionKey 는 호출자가 메시지를 보내는 완료 포트를 결정하는 데 도움이 됩니다.
lpOverlapped 메시지별 값입니다. 자세한 내용은 다음 메시지 식별자 표를 참조하세요.
LpNumberOfBytes 발생한 작업 관련 이벤트를 나타내는 메시지 식별자입니다. 자세한 내용은 다음 메시지 식별자 표를 참조하세요.
 

다음 메시지를 완료 포트로 보낼 수 있습니다. 프로세스 식별자를 반환하는 메시지의 경우 프로세스에 대한 열린 핸들을 유지 관리하지 않는 한 이 프로세스가 여전히 활성 상태이거나 식별자가 재활용되지 않았다는 것을 보장할 수 없습니다(종료 후 새 프로세스에 할당됨).

메시지 식별자 Description
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 메시지를 사용할 때는 주의해야 합니다. instance 경우 프로세스가 작업 내에서 적극적으로 시작 및 종료되고 완료 포트를 작업에 할당하는 중이면 완료 포트 연결 중에 상태가 변경되는 프로세스에 대한 메시지가 누락될 수 있습니다. 이러한 이유로 작업이 비활성 상태일 때 완료 포트를 작업과 연결하는 것이 가장 좋습니다.

요구 사항

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

추가 정보

PostQueuedCompletionStatus

QueryInformationJobObject

SetInformationJobObject