2009-11-29 3 views
3

셸 함수를 사용하여 열 때 응용 프로그램 핸들에 유의하십시오. 그런 다음 해당 핸들을 사용하여 나중에 응용 프로그램을 닫습니다. 그러나 사용자는 다른 응용 프로그램을 직접 닫을 수도 있습니다. 그 핸들을 창에 의해 재사용 할 수있어서 그 핸들을 사용할 때 다른 프로세스를 닫을 수 있습니다. 가능성이 있다면 가능합니까?윈도우 핸들 재사용 빈도

답변

4

아니요, 걱정할 필요가 없습니다. OpenProcess, ShellExecuteEx() 또는 CreateProcess에 의해 반환 된 핸들은 프로세스 객체를 활성 상태로 유지합니다. 프로세스가 종료 된 후에 GetExitCodeProcess()를 호출하여 종료 코드를 검색하는 것이 가능합니다.

개체는 마지막 핸들이 닫힐 때까지 해제되지 않습니다. 이 스레드에서 제공된 이전 조언과는 반대로 CloseHandle()을 호출하거나 누수가 발생하는 것이 매우 중요합니다.

+0

고마워,하지만 난 따라하지 않아. closehandle()이 호출되지 않아 메모리 누수가 발생합니다. 셸 호출을 수행 한 응용 프로그램이 제대로 닫히면 정리 될까요? – jjb

+0

예, Windows가 닫히지 않은 핸들을 지 웁니다. 그걸 멀리하지 못하게하십시오. –

+0

그냥 sendMessage를 호출하지 마십시오 SendMessage (intHandle, const_CLOSE, 0 &, 0 &)를 호출하십시오. 모두 응용 프로그램을 닫고 closehandle() 작업을 동시에 수행합니까? – jjb

3

프로세스 핸들이 종료 될 때까지 기다릴 수 있습니다.

WaitForSingleObject (hProcess, INFINITE);

이 정보가 반환되면 프로세스가 종료되었으며 프로세스를 종료 할 필요가 없다는 것을 알았습니다.

+3

아니요. 누출을 방지하려면 CloseHandle()을 호출해야합니다. –

+0

고마워요.하지만 쉘 명령을 수행 한 응용 프로그램이 닫을 때까지 열려 있기 때문에 핸들이 다시 사용되지 않는 것 같습니다. – jjb