잠토의 잠망경

CreateProcess & OpenProcess &GetExitCodeProcess &TerminateProcess 본문

공부/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;
}
Comments