나는 다음과 같은 라인을 따라 정의 된 제한 시간 내에 종료해야 자식 프로세스를 시작하고 살고있다. 내 주요 프로그램은 C#
로 작성되었으며 Visual Studio 2013 및 Windows 7 64 비트을 사용하여 개발했습니다.자식 프로세스는 영원히
대부분의 경우 위 코드가 작동하고 적절한 프로세스 시간 초과 종료가 수행됩니다. 그러나 약 5 %의 경우에 process.Kill()
에는 눈에 띄는 효과가 없습니다. 하위 프로세스는 활성 상태로 유지됩니다.
낮은 우선 순위로 하위 프로세스를 시작하려고했습니다. 나는 또한 그것을 죽이기 전에 그것을 중단하려했다. 외부 도구로 TASKKILL /F
을 호출하는 것이 항상 도움이되는 것은 아닙니다. 문제는 모든 SAT 해결사에게 발생하지 않습니다. 관리자 권한이 있지만 관리자로 주 프로그램을 실행하지 않습니다.
내 응용 프로그램의 하위 프로세스를 안정적으로 종료하려면 어떻게해야합니까?
편집 : 외에도 자신의 타임 아웃 예산을 초과에서
는, 자식 프로세스는 매우 정상적인 행동과 (관리자 상승없이) 프로세스 탐색기를 사용하여 수동으로 사망 할 수 있습니다. 문제는 시간 초과 후 프로세스가 실행되지 않도록하는 방법입니다.
해결 방법 : 내가 VC++ 2013를 사용하여 제한 시간 도구를 구현 한
. 자식 프로세스를 직접 호출하는 대신, 지금은 자식 프로세스를 호출하는 도구를 호출합니다. 이 도구는 CreateProcess() 및 TerminateProcess()을 사용하여 하위 프로세스를 시작하고 중지합니다. C#
프로그램에서 CreateProcess()과 TerminateProcess()을 직접 호출 할 수 있습니다. 추가 프로세스를 생성하지 않고 직접 호출 할 수 있습니다.
해결 방법은 좋지 않지만 내 문제는 해결됩니다.
은, 모든 IO는 취소 할 수. 처리 할 수없는 IO가 해결되지 않으면 좀비 상태가 될 수 있습니다. 그것은 매우 드뭅니다. – usr
'Kill'에 대한 문서에서 : "Kill 메서드는 비동기 적으로 실행됩니다.Kill 메서드를 호출 한 후 WaitForExit 메서드를 호출하여 프로세스가 종료 될 때까지 기다리거나 HasExited 속성을 검사하여 프로세스가 종료되었는지 확인합니다. –
또한 Kill에서 발생하는 예외를 잡으려고 시도하십시오. 응용 프로그램이 종료되기 때문에 예외가 throw되고 표시되지 않을 수 있습니다. –