C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[18820] Re:부모 실행파일에서 실행중인 자식 실행파일을 죽이는 방법 좀 알려주세요....
유영인.Chris [cuperido] 1367 읽음    2002-05-24 11:01
문제가 되서 실행이 안되셨다면, 자식 실행 파일의 핸들이 없지 않을까 생각되네요..
우선, CreateProcess 로 만든 프로세스를 아래와 같이 Kill 시키실 수 있습니다.

>> TerminateProcess(piParam.hProcess, -1);


타이머를 써서 체크를 하시는 것보다, 아래와 같이 하시는 것은 어떨까 생각되네요.


void __fastcall TForm1::CreateCommand(String stCommand)
{

HWND                   hdWindow;
STARTUPINFO            siParam;
PROCESS_INFORMATION    piParam;
DWORD                  dwExitCode;
int                    itStartTime;


// 초기화
FillMemory(&siParam, sizeof(STARTUPINFO), 0);
FillMemory(&piParam, sizeof(PROCESS_INFORMATION), 0);

// Param 섯팅
siParam.cb          = sizeof(STARTUPINFO);
siParam.dwFlags     = STARTF_USESHOWWINDOW;
siParam.wShowWindow = SW_SHOW;

CreateProcess(NULL, stCommand.c_str(), NULL, NULL, FALSE, 0, NULL, NULL, &siParam, &piParam);
WaitForInputIdle(GetCurrentProcess(), INFINITE);

// 프로세스가 종료될때까지 대기함
if(piParam.hProcess) {
   dwExitCode  = STILL_ACTIVE;
   itStartTime = time(0);       // 시작 시간

   while(dwExitCode == STILL_ACTIVE) {
     WaitForSingleObject(piParam.hProcess, 1000);
     GetExitCodeProcess(piParam.hProcess, &dwExitCode);
     UpdateWindow(Handle);

     if(time(0) - itStartTime > 30) {     // 30초가 되면 강제로 끔
       TerminateProcess(piParam.hProcess, -1);
       break;
     }
   }
}

}




박경진 님이 쓰신 글 :
: 하나의 프로그램이 1분마다 여러 실행파일을 실행시킵니다.
: 그런데...
: 하나의 실행파일이 실행중에 문제가 생기면 Holding 상태에로 멈추게 되면서
: 다음에 줄줄이 실행되야할 실행파일들이 실행되지 못하는 경우가 종종 생깁니다. 
: 타이머를 써서 30초 이상이 경과하면 현재 실행중인 파일을 KILL하고 싶은데요....
: 어떻게 해야 하나요....
: 현재 실행은 다음과 같이 하고 있습니다.
:
: =============================================================================================
: void __fastcall Timer1Timer(TObject *Sender)
: {
:     StartProcess("bin\\aaaa.exe");
:     StartProcess("bin\\bbbb.exe");
: }
:
:
: void StartProcess(AnsiString Str)
: {
:    AnsiString curDir = Str;
:
:    STARTUPINFO              siParam;
:    PROCESS_INFORMATION      piParam;
:    DWORD                    dwExitCode;
:
:
:    // 초기화
:    FillMemory(&siParam, sizeof(STARTUPINFO), 0);
:    FillMemory(&piParam, sizeof(PROCESS_INFORMATION), 0);
:
:    // Param 섯팅
:    siParam.cb               = sizeof(STARTUPINFO);
:    siParam.dwFlags       = STARTF_USESHOWWINDOW;
:    siParam.wShowWindow = SW_HIDE;
:
:    CreateProcess(NULL, curDir.c_str(), NULL, NULL, FALSE, 0, NULL, NULL, &siParam, &piParam);
:    WaitForInputIdle(GetCurrentProcess(), INFINITE);
:
:    // 프로세스가 종료될때까지 대기함
:    if(piParam.hProcess) {
:       dwExitCode = STILL_ACTIVE;
:
:
:       while(dwExitCode == STILL_ACTIVE) {
:          WaitForSingleObject(piParam.hProcess, 100);
:          GetExitCodeProcess(piParam.hProcess, &dwExitCode);
:          UpdateWindow(Handle);
:       }
:    }
: }
: ============================================================================================

+ -

관련 글 리스트
18798 부모 실행파일에서 실행중인 자식 실행파일을 죽이는 방법 좀 알려주세요.... 박경진 1074 2002/05/23
18820     Re:부모 실행파일에서 실행중인 자식 실행파일을 죽이는 방법 좀 알려주세요.... 유영인.Chris 1367 2002/05/24
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.