공부/API
CreateProcess & OpenProcess &GetExitCodeProcess &TerminateProcess
잠수함토끼
2008. 9. 9. 10:01
#undef UNICODE #include#include void ProcA() { STARTUPINFO si={sizeof(STARTUPINFO),}; PROCESS_INFORMATION pi; //프로세스를 하나 실행시킵니다. if(CreateProcess(NULL, //[in]실행파일의 이름 "NotePad.exe",//[in]실행파일의 이름(권장) NULL, //[in]프로세스 속성의 상속에 관련된것 NULL, //[in]쓰레드 속성의 상속에 관련된것 FALSE, //[in]상속에 관련된것 0, //[in]프로세스의 스케줄링에 priority에 영향을 준다. NULL, //[in]A pointer to the environment block for the new process. NULL, //[in]The full path to the current directory for the process. &si, //[in]시작할 때의 정보를 설장해준다. &pi)) //[out]프로세스의 정보를 셋해준다. { CloseHandle(pi.hProcess); CloseHandle(pi.hThread); } //시간을 조금 둡니다. Sleep(1000); //프로세스 id를 이용하여 프로세스의 핸들을 얻어냅니다. HANDLE hProcA=OpenProcess(PROCESS_ALL_ACCESS, FALSE, pi.dwProcessId); DWORD ExitCode; //프로세스가 종료되었는지 체크를 합니다. GetExitCodeProcess(hProcA,&ExitCode); //프로세스가 아직도 살아있는지에 대한 조건문입니다. if(ExitCode != STILL_ACTIVE) { printf("He's gone!!\n"); }else{ //아직 살아 있다면 프로세스를 종료시킵니다. TerminateProcess(hProcA,0); } //프로세스의 핸들을 닫습니다. CloseHandle(hProcA); } int main(void) { ProcA(); return 0; }