음...
작업관리자에서
"프로세서 끝내기" 가 아니라 "프로세서 트리 끝내기" 하면..
현재 process에서 생성한 child프로세서들이 모두 같이 종료됩니다.
그런데..
"프로세서 트리 끝내기" 버튼을 클릭한다는 보장은 없으니..
다른 방법이 있는지는 모르겠지만..
프로세서를 create할때 단순 child가 아닌
debug-process로 실행해서 debug-event 처리하시면...
debuger가 강제 종료될때.. debugee도 같이 종료되더군요
bcb에서 debuging중에 먹통이 되었을때..
작업관리자에서 bcb를 죽이면 debuging중이던 process도 같이 종료되는것처럼요..
그럼..
초보 님이 쓰신 글 :
: 일단 코드를.....
:
:
: bool __fastcall TForm1::WaitCommand(AnsiString Command){
: STARTUPINFO sInfo;
: memset(&sInfo, 0, sizeof(STARTUPINFO));
: sInfo.cb = sizeof(sInfo);
: sInfo.wShowWindow = SW_HIDE;
: SECURITY_ATTRIBUTES sAttr;
: sAttr.nLength = sizeof(sAttr);
: sAttr.lpSecurityDescriptor = NULL;
: sAttr.bInheritHandle = TRUE;
: PROCESS_INFORMATION pInfo;
: if(CreateProcess(NULL, Command.c_str(), &sAttr, &sAttr, TRUE,0, NULL, NULL ,
: &sInfo, &pInfo) != TRUE)return false;
:
: DWORD result;
:
: do{
: Application->ProcessMessages();
: result = WaitForSingleObject(pInfo.hProcess, 5);
: }while(result == WAIT_TIMEOUT);
:
: if (result == WAIT_FAILED)return false;
: CloseHandle(pInfo.hProcess);
: return true;
: }
:
: void __fastcall TForm1::Button1Click(TObject *Sender){
: WaitCommand("notepad.exe");
: ShowMessage("실행끝");
: }
:
:
:
: 소스를 간단하게 설명하면 Button1 을 눌르면 노트패드를 실행 하고
: 기다리다가 종료 되면 "실행끝" 이라구 출력 합니다.
:
: 그런데 제 프로그램을 a.exe 라구 치구요, 노트 패트를 b.exe 이라구 치고
: a.exe 에서 b.exe 실행한 상태에서 a.exe 작업관리자에서 강제 종료 시켜 버리면
: b.exe 도 같이 종료 되게 하고 싶은데요
: 정상적인 종료라면 OnClose 같은 이벤트를 써서 TerminateProcess 로 종료시켜 버리면되지만
: 작업관리자로 강제로 종료 시켜 버리면 아무 이벤트도 오지 않습니다.
:
: a.exe 를 작업관리자에서 강제 종료 되면 b.exe 도 같이 종료 되게 하고 싶은데
: 방법이 없을까요?