Notice
Recent Posts
Recent Comments
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- 운영체제
- 아두이노
- 아두이노 소스
- C언어
- Stack
- 아두이노 컴파일러
- list
- WinAPI
- arduino compiler
- queue
- Array
- Visual Micro
- priority_queue
- set
- directx
- c++
- 시스템프로그래밍
- 수광 소자
- 라인트레이서
- map
- 자료구조
- vector
- Arduino
- 컴퓨터 그래픽스
- Deque
- html
- 통계학
- LineTracer
- stl
- Algorithm
Archives
- Today
- Total
Kim's Programming
프로세스의 생성 본문
프로세스의 생성
CreateProcess 함수
1 2 3 4 5 6 7 8 9 10 11 12 | BOOL CreateProcess( LPCSTR lpApplicationName, //1 LPSTR lpCommandLine, //2 LPSECURITY_ATTRIBUTES lpProcessAttributes, //3 LPSECURITY_ATTRIBUTES lpThreadAttributes, //4 BOOL bInheritHandles, //5 DWORD dwCreationFlags, //6 LPVOID lpEnvironment, //7 LPCSTR lpCurrentDirectory, //8 LPSTARTUPINFOA lpStartupInfo, //9 LPPROCESS_INFORMATION lpProcessInformation //10 ); | cs |
인자 별 의미
- 생성할 프로세스의 실행파일 이름을 인자로 전달한다. 경로명 지정하지 않으면 현재 디렉터리에서 찾는다.
- 실행파일에 전달할 argc, argv 인자를 전달할때 쓴다. 첫번째에 NULL을 전달하고 두번째에 실행파일 이름도 전달할 수 있다.
- 프로세스의 보안속성 지정한다. NULL 지정시 기본 보안 속성
- 스레드의 보안 속성을 지정할 때 사용한다. NULL 지정시 기본 보안 속성
- 전달인자가 TRUE인 경우 생성되는 자식 프로세스는 부모 프로세스가 소유하는 핸들중 상속 가능한 핸들을 상속한다.
- 생성하는 프로세스의 특성을 결정지을때 사용(우선순위 등), 설정할 필요 없을 때는 0을 지정
- 프로세스마다 Environment Block(환경 블록)이라는 메모리 블록을 관리한다. 이 블록을 통해서 프로세스가 실행에 필요로 하는 문자열을 저장할 수 있다.NULL이 전달되면, 자식 프로세스는 부모 프로세스의 환경 블록에 저장되어 있는 문자열을 복사하게 된다.
- 생성하는 프로세스의 현재 디렉터리를 설정하는 인자, 전달인자는 디렉터리 정보를 포함하는 완전경로 형태로 구성하며, NULL이 전달될 경우 부모 프로세스의 현제 디렉터리가 새로 생성되는 자식 프로세스의 현재 디렉터리가 된다. 일반적으로 NULL
- 프로세스 속성을 지정하는 STARTUPINFO 구조체 변수를 전달한다.
- 생성하는 프로세스 정보를 얻기 위해 사용되는 PROCESS_INFORMATION 구조체를 전달하는 인자이다.
* 자식 프로세스
1 2 3 4 5 6 7 8 9 10 11 12 13 | #include<iostream> #include<tchar.h> #include<Windows.h> INT _tamin(int argc, TCHAR* argv[]) { DWORD val1 = _ttoi(argv[1]); DWORD val2 = _ttoi(argv[2]); std::wcout << val1 << _T(" + ") << val2 << _T(" = ") << val1 + val2 << std::endl; _gettchar(); return 0; } | cs |
* 부모 프로세스
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | #include<iostream> #include<tchar.h> #include<Windows.h> #define DIR_LEN MAX_PATH + 1 INT _tmain(INT argc, TCHAR* argv[]) { STARTUPINFO si; PROCESS_INFORMATION pi; ZeroMemory(&si, sizeof(STARTUPINFO)); si.cb = sizeof(si); si.dwFlags = STARTF_USEPOSITION | STARTF_USESIZE; si.dwX = 100; si.dwY = 200; si.dwXSize = 300; si.dwYSize = 200; si.lpTitle = _T("Child Process"); TCHAR commandLine[] = _T("Child.exe 10 20"); TCHAR cDir[DIR_LEN]; BOOL state; GetCurrentDirectory(DIR_LEN, cDir); std::wcout << cDir << std::endl; state = CreateProcess(NULL, commandLine, NULL, NULL, TRUE, CREATE_NEW_CONSOLE, NULL, NULL, &si, &pi); if (state) std::wcout << _T("Creation OK!") << std::endl; else std::wcout << _T("Creation Error!") << std::endl; return 0; } | cs |
결과)
프로세스 생성 단계
- STARTUPINFO 구조체 변수의 생성하고 초기화 한다
- (현재 디렉토리를 설정한다.(자식프로세스가 있는 위치))
- CreateProcess 함수를 호출한다.
'Programming > System Programming' 카테고리의 다른 글
문자셋(Character Set) (0) | 2017.06.24 |
---|---|
IPC(Inter-Process Communication) - MailSlot (0) | 2016.02.25 |
프로세스 예제 (0) | 2016.02.05 |
커널 오브젝트 그리고 Usage Count (0) | 2016.01.01 |
구조적 예외처리 - SEH(Structured Exception Handling) (0) | 2015.12.30 |