상세 컨텐츠

본문 제목

05.3 프로세스의 생성 (CreateProcess)

Programming/Windows System

by RACC8N 2020. 4. 5. 16:38

본문

CreateProcess 함수의 이해

부모 프로세스(Parent Process) : CreateProcess함수를 호출하는 프로세스

자식 프로세스(Child Process) : CreateProcess함수 호출에 의해 생성된 프로세스

lpApplicationName 생성할 프로세스의 실행파일 이름
lpCommandLine 생성할 프로세스의 매개변수 (lpApplicaionName에 NULL을 주고, 여기에 이름을 넣어도 됨)
lpProcessAttributes 프로세스 보안 속성 지정 (NULL : default)
lpThreadAttributes 쓰레드 보안 속성 지정 (NULL : default)
bInheritHandles TRUE : 생성되는 자식 프로세스는 부모 프로세스가 소유하는 handle을 상속 가능 (T/F)
dwCreationFlags 생성하는 프로세스의 특성(특히 우선순위)를 결정지을 때 사용 (0 : default)
lpEnvironment 생성하는 프로세스의 Environment block을 지정 (NULL : 부모 block 복사)
lpCurrentDirectory 생성하는 프로세스의 현재 디렉터리를 설정 (NULL : default)
lpStartupInfo 생성하는 프로세스의 속성을 지정하기 위해 사용 (STARTUPINFO 구조체 변수 주소값)
lpProcessInfromation 생성하는 프로세스 정보를 얻기 위해 사용(PROCESS_INFORMATION 구조체 변수 주소값)

프로세스 생성 1 단계 : STARTUPINFO 구조체 변수의 생성 및 초기화

STARTUPINFO 구조체 : 생성하는 프로세스의 속성을 지정하는 용도로 사용된다.

STARTUPINFO 구초제 변수를 선언과 동시에 0으로 초기화 해야 한다.

cb 구조체 변수의 크기
lpTitle 콘솔 윈도우의 타이틀 바 제목
dwX 프로세스 윈도우의 x좌표
dwY 프로세스 윈도우의 y자표
dwXsize 프로세스 윈도우의 가로 길이
dwYsize 프로세스 윈도우의 세로 길이
dwFlags 설정된 멤버의 정보 (STARTF_USEPOSITION : dwX, dwY 사용, STARTF_USESIZE : dwXsize, dwYsize 사용)

※ dwFlags에 STARTF_USEPOSITION, STARTF_USZESIZE가 설정되지 않으면 아무리 dwX,Y dwX,Ysize가 설정되었다해도 사용할 수 없다.

 

프로세스 생성 2 단계 : 현재 디렉터리의 설정

Windows는 "현재 디렉터리"라는 개념을 제공한다.  만약에 완전경로를 전달하지 않고 파일을 생성 및 개방할 경우 현재 디렉터리 기준으로 작업이 이루어진다.

 

현재 디렉터리를 확인하는 함수 GetCurrentDirectory() 

nBufferLength 현재 디렉터리 정보가 저장될 메모리 버퍼의 크기
lpBuffer 현재 디렉터리 정보가 저장될 메모리 버퍼의 포인터

프로세스의 현재 디렉터리 변경 함수 SetCurrentDirectory()

lpPathName 변경하고자 하는 현재 디렉터리 경로명

프로세스 생성 3 단계 : CreateProcess 함수의 호출

 

CreateProcess 함수는 내부적으로 문자열에 변경을 가한다. 따라서 전달인자의 문자열은 변수 형태여야 한다.

EX) CreateProcess( NULL, _T("A.exe 10 20"), ...) 불가능 // CreateProcess(NULL, command, .....) 가능 (command = 변수)

 

첫 번째 전달인자를 통해서 실행파일 이름을 전달할 경우 : 현재 디렉터리를 기준으로 실행파일을 찾음

두 번째 전달인자를 통해서 실행파일 이름을 전달할 경우 : 표준 검색경로 순서대로 실행파일을 찾음

1 표준 검색 경로 : 실행 중인 프로세스의 실행파일이 존재하는 디렉터리 

2 표준 검색 경로 : 실행 중인 프로세스의 현재 디렉터리

3 표준 검색 경로 : Windows의 시스템 디렉터리 (GetSystemDirectory)

4 표준 검색 경로 : Windows 디렉터리 (GetWindowsDirectory)

5 표준 검색 경로 : 환경변수 PATH에 의해 지정되어 있는 디렉터리

 

여섯 번째 전달인자 dwCreationFlags는 프로세스 특성을 결정지을 때 사용된다.

-> CREATE_NEW_CONSOLE을 전달하면 새롭게 생성하는 프로세스를 위한 콘솔 윈도우가 독립적으로 생성된다. 

 

이것만은 알고 갑시다

 

1. 프로세스에 대한 이해

  실행 중에 있는 프로그램을 가리킨다. 

 

2. 프로세스의 상태

  Ready 상태 , Running 상태 Blocked 상태

 

3. 컨텍스트 스위칭 

  실행 중인 프로세스가 변경될 때 레지스터와 메모리 사이에 데이터 교환

 

4. 프로세스를 생성하는 방법

  CreateProcess 익숙해 지기

관련글 더보기

댓글 영역