반응형
C/C++에서 프로세스를 생성하는 방법은 다음과 같습니다.
CreateProcess() 함수를 통해 생성하는 방법입니다.
CreateProcess() 함수는 다음과 같이 정의되어 있습니다.
BOOL CreateProcess{
LPCTSTR lpApplicationName,
LPTSTR lpCommandLine,
LPSECURITY_ATTRIBUTES lpProcessAttributes,
LPSECURTIY_ATTRIBUTES lpThreadAttributes,
BOOL bInheritHandles,
DWORD dwCreationFlags,
LPVOID lpEnvironment,
LPCTSTR lpCurrentDirectory,
LPSTARTUPINFO lpStartupInfo,
LPPROCESS_INFORMATION lpProcessInformation
};

프로세스를 생성하게 되면 부모프로세스와 커널오브젝트를 공유하게 됩니다.
부모프로세스는 커널오브젝트를 통해 자식프로세스의 정보를 얻어올 수 있습니다.

자식프로세스는 종료가 되면 커널 오브젝트와의 연결을 자동으로 끊어내지만 부모프로세스는 그렇지 않습니다.
즉, 프로그래머가 직접 연결을 끊어줘야 합니다.
연결을 안끊어주게 된다면 아래와 같이 진행하게 됩니다.

따라서 자식프로세스를 생성한 후 연결을 끊어줘야 합니다.
끊어주는 타이밍은 프로그래머가 용도에 맞게 적절한 위치에서 끊어주면 됩니다.
끊기 위해서는 CloseHandle() 함수를 사용합니다.
TCHAR command[] = _T("test.exe");
STARTUPINFO si = { 0, };
PROCESS_INFORMATION pi;
si.cb = sizeof(si);
TCHAR title[] = "test.exe";
si.lpTitle = title;
CreateProcess(NULL, command, NULL, NULL, FALSE, CREATE_NEW_CONSOLE, NULL, NULL, &si, &pi);
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
이런식으로 말이죠.
반응형
'프로그래밍 > 운영체제' 카테고리의 다른 글
C/C++ IPC인 mailslot에 대한 이해 (0) | 2020.01.16 |
---|---|
C/C++ 뇌를 자극하는 윈도우 운영체제 프로젝트 2. (0) | 2019.12.29 |
c/c++ TCHAR 정리. (1) | 2019.12.29 |
유니코드와 아스키코드(SBCS, MBCS, WBCS) (0) | 2019.12.11 |
댓글