익명 사용자
로그인하지 않음
계정 만들기
로그인
youngwiki
검색
Process Control 문서 원본 보기
youngwiki
이름공간
문서
토론
더 보기
더 보기
문서 행위
읽기
원본 보기
역사
←
Process Control
문서 편집 권한이 없습니다. 다음 이유를 확인해주세요:
요청한 명령은 다음 권한을 가진 사용자에게 제한됩니다:
사용자
.
문서의 원본을 보거나 복사할 수 있습니다.
==개요== 해당 문서는 Process(프로세스)를 fork()함수를 통해 생성하고 관리하는 방법에 대해서 서술한다. ==Process ID== Process ID(PID)란 각각의 프로세스가 가지는 고유한 음수가 아닌 숫자를 의미한다. PID를 얻는 방법은 다음 두가지가 있다. # pid_t getpid(void);: 현재 실행 중인 프로세스의 PID를 반환 # pid_t getppid(void); 현재 실행 중인 프로세스를 생성한 부모 프로세스의 PID를 반환 pid_t 자료형은 정수로 저장되고 PID를 저장하는 특수한 자료형이다. ==Process의 세가지 상태== 프로세스를 다음 세가지 상태 중 하나로 구분할 수 있다. # Running: CPU에 의해 실행되고 있거나 실행되기를 기다리고 있는 상태이며 결국 커널에 의해서 스케쥴링 된다. # Stopped: 프로세스의 실행이 suspend 되었으며 추가적인 시그널을 받기 전까지 스케쥴링되지 않음 #Terminated: 프로세스가 영구적으로 정리되어 리소스의 정리가 필요함 #* 다음 세가지 이유 중 하나로 종료됨 #*# default action이 terminate인 signal을 받았을 때 #*# main 루틴에서 return을 할 때 -> main에서 0을 반환하여 명시적으로 종료 #*# exit(): terminate 상태로 프로세스를 종료 #*#* 정상적인 종료 상태는 0이며, 에러가 일어나면 0이 아니다. ==Creating Process== parent 프로세스는 fork() 함수를 호출하여 새롭게 실행하는 child 프로세스를 생성할 수 있다.<ref>child 프로세스의 PID는 parent 프로세스의 PID를 반환한다.</ref> * pid_t fork(void): 자식 프로세스에는 0을 반환하고, 부모 프로세스에는 child의 PID를 반환한다. ** fork() 함수는 한 번 호출되지만 각각의 프로세스에서 따로 반환하므로 두번 반환된다. ** child 프로세스는 parent 프로세스의 가상 메모리 공간의 복사본을 복사한다. 이를 통해서 부모 프로세스가 fork를 호출할 당시 열려있던 파일에 동일하게 접근 가능하다. 이때 부모 자식 프로세스의 실행은 커널에 의해 진행되므로 명령어의 실제적인 실행은 섞일 수 있다. 따라서 프로그래머들은 서로 다른 프로세스에서 명령어들이 어떤 순서로 실행될 지에 대해서 확신할 수 없다. 아래는 프로세스를 만드는 프로그램의 예시와 이를 쉘에서 실행한 결과이다. <syntaxhighlight lang = "c"> int main() { pid_t pid; int x = 1; pid = Fork(); if (pid == 0) { /* Child */ printf("child : x=%d\n", ++x); exit(0); } /* Parent */ printf("parent: x=%d\n", --x); exit(0); } </syntaxhighlight> <pre> linux> ./fork parent: x=0 child : x=2 </pre> 이를 통해서 다음과 같은 사실들을 도출할 수 있다. # Call Once, Return Twice: pid의 반환값이 부모 프로세스와 자식 프로세스가 다르므로 서로 다른 실행과정을 거침 # Duplicate but seperate address spaces: 변수 x의 값은 처음에는 같으나 독립적으로 존재하여 최종적으로는 달라짐 # Shared files: 두 프로세스 모두 실행 결과가 screen에 표시되며, 이는 자식 프로세스가 부모의 파일에 접근 가능하기 때문(stdout이 동일함) ==각주== [[분류:컴퓨터 시스템]]
Process Control
문서로 돌아갑니다.
둘러보기
둘러보기
대문
최근 바뀜
임의의 문서로
미디어위키 도움말
위키 도구
위키 도구
특수 문서 목록
문서 도구
문서 도구
사용자 문서 도구
더 보기
여기를 가리키는 문서
가리키는 글의 최근 바뀜
문서 정보
문서 기록