2012-06-16 2 views
1

내 응용 프로그램의 자식 프로세스를 죽이고 exit(exit_code), 비슷하게 다른 프로세스에서 (deconstructors 및 atexit 함수를 호출하는) 정리를 수행 할 수 있습니까?정리 자식 프로세스를

+0

가능한 복제본 http://stackoverflow.com/questions/6501522/how-to-kill-a-child-process-by-the-parent-pr ocess –

+0

유닉스의 @MareInfinitus, 윈도우 구현이 필요합니다. –

답변

3

Windows를 사용하는 경우 마지막 매개 변수로 PROCESS_INFORMATION이있는 CreateProcess를 사용하여 하위 프로세스를 시작하는 것이 좋습니다.

CreateProcess on MSDN

Process Information on MSDN

옵션 1 : 프로세스가 hProcess 멤버에 시작에

이 프로세스 정보가 핸들을 포함합니다.

이 핸들을 저장할 수 있으며이를 사용하여 하위 프로세스를 종료 할 수 있습니다.

삽입 아마도 WM_CLOSE 및/또는 WM_QUIT를 보내시겠습니까?

이 옵션이 여기에

KB how to cleanly kill win32 processes

** 끝 삽입을 할 ** 무엇에 KB 기사는 다음과 같습니다 : 여기

는 토론이다 는 "깨끗하게"프로세스를 종료합니다 프로세스 트리를 적절히 삭제하는 방법 : Terminate a process tree on windows

+0

'ExitProcess'는 그것을 호출 한 프로세스를 죽이고 부모로부터 자식을 죽일 필요가 있고'TerminateProcess'는 정리를 수행하지 않는다! –

+0

이 프로세스가 생성되는 방법과 프로세스가 어떤 종류인지에 대한 정보를 제공하지 않으므로 다소 어렵습니다. WM_CLOSE를 보내는 것은 괜찮을 수도 있고, GenerateConsoleCtrlEvent()가 그 일을 할 수도 있습니다. –

+0

'CreateProcess'를 사용하고 있는데, WM_CLOSE/WM_QUIT와는 달리 보편적 인 방법에 관심이 있습니다. WM_CLOSE을 사용하는 프로세스는 윈도우가 –

2

그런 종류의 간단한 Win32 API는 없습니다. OS는 프로그램의 소스 코드가 어떤 언어로 작성되었는지는 신경 쓰지 않고, 컴파일 된 프로그램은 단지 CPU 명령 시퀀스와 데이터로 나타납니다.

가장 깨끗한 방법은 프로세스간에 (예 : 공유 메모리를 통해) 어떤 종류의 통신 채널을 설정하고 프로세스 종료를 요청하는 것입니다.

자식 프로세스를 디버깅 된 프로세스로 시작한 다음 디버그 API를 사용하여 자식의 동작을 변경하여 동일하게 구현할 수 있지만 이는 너무 복잡하고 구현하기가 쉽지 않습니다.

+1

가장 간단하고 저렴한 "통신 채널"은 명명 된 이벤트입니다. – arx

+0

@ 아마 : 좋은 선택입니다. –

+0

@arx 나는 이것을 할 수 없다. 자식 프로세스가 나를 쓰지 않는다. –

관련 문제