Windows에서 아동 프로세스 상태 및 자원 사용을 아는 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/870253

문제

아동 프로세스를 시작하는 프로그램을 작성하고 싶습니다. 자식 프로세스는 Windows 모드 또는 콘솔 모드 프로그램 일 수 있습니다.

아동 프로세스 상태 및 자원 사용을 모니터링하고 싶습니다. 예를 들어 아동 프로세스가 여전히 실행되거나 종료되고 있음을 알고 싶습니다. 종료되면 그 이유를 알고 싶습니다 (정상적으로 또는 충돌로 인해 종료됩니다).

아동 프로세스 실행 및/또는 종료 중에 자원 사용, 특히 CPU 시간 (사용자 시간, 시스템) 및 메모리 사용량 (가상 크기 및/또는 RSS)을 알고 싶습니다. 숫자가 정확하지 않으면 괜찮습니다.

유닉스 용어에서는 포크, exec, waitpid 및 getrusage를 원합니다. 포크+setrusage+exec는 자식의 자원 사용을 제한 할 수 있습니다. 그러나 나는 Windows 플랫폼에서이를 수행하는 방법을 모른다.

Windows API 이름을 알려주세요. 나머지는 직접 공부할 수있었습니다.

Windows API 이외의 라이브러리를 사용하지 않는 것이 좋습니다. 디버거로 작업하고 아동 프로세스에 부착하는 부모가 아닌 것이 좋습니다. 선호하지는 않지만 여전히 허용됩니다.

도움이 되었습니까?

해결책

CreateProcess를 호출하면 핸들을 프로세스로 반환합니다.

프로세스 핸들의 WaitforsingleObject는 프로세스가 종료되거나 타임 아웃이 만료 될 때까지 차단됩니다. 0의 시간 초과는 즉시 돌아와 프로세스가 여전히 실행 중인지 나타냅니다.

BOOL IsProcessRunning(HANDLE process)
{
    return WaitForSingleObject(process, 0) != WAIT_OBJECT_0;
}

void WaitForProcessToExit(HANDLE process)
{
    WaitForSingleObject(process, INFINITE);
}

실행중인 프로세스의 종료 코드를 얻으려면 getExitcodeProcess를 사용할 수 있습니다. 그러나 오류 코드의 의미를 해석해야합니다. 0xc0000005는 액세스 위반에 대해 일반적이지만 모든 충돌로 인해이 오류 코드가 발생하는 것은 아닙니다.

리소스 사용을 위해서는 GetProcessTimes에 전화하여 총 CPU 시간을 얻고 GTGUIRESORCES를 얻으려면 GDI 핸들 정보를 얻고 GetProcessMemoryInfo를 얻으려면 메모리 통계를 가져오고 IO 정보를 얻으려면 GetProcessioCounters를 얻을 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top