프로세스의 생성과 종료(UNIX)
pid: 프로세스 식별자
운영체제에서 각 프로세스를 식별하기 위해 부여한 번호. 일반적으로 양의 정수로 부여된다.(pid가 음수면 오류로 취급)
프로세스에서 자식 프로세스를 만들거나 종료할 수 있다.
프로세스 생성: fork()
- int fork(void)의 함수 형태이며 자식 프로세스를 생성한다. 자식 프로세스엔 0을, 부모 프로세스에는 자식의 pid를 반환한다.
- 자식은 부모와 거의 동일하지만 pid가 다르고 다른 메모리 공간을 사용한다. 또한 독립된 프로세스여서 서로 영향을 주지 않는다.
- 예)
int main(){ pid_t pid; int a = 3; pid = fork(); //자식만 실행// if (pid == 0) {printf("child: %d", --a); exit(0);} //부모만 실행// else {printf("parent: %d", ++a); exit(0);} }
결과: parent: 4 child: 2 (<- parent, child 출력순서는 아무렇게나 출력됨)
프로세스 제거: wait() - 자식 프로세스를 exit(0)으로 종료돼도 여전히 시스템 속에 남아있음 (자원낭비) 따라서 wait으로 부모가 자식 프로세스 제거해야됨
- 물론 부모 프로세스가 종료되면 자식은 초기화 프로세스에 의해 제거되긴 함.
- int wait(int *child_status): 자식 중 아무나 하나 종료될 때까지 프로세스 일시 중단. 반환값은 종료된 자식의 pid
- pid_t wait_pid(pid_t pid, int &status, int options): 특정 pid가 종료될 때까지 프로세스 일시 중단
728x90
반응형
'CS > 컴퓨터 구조' 카테고리의 다른 글
[컴퓨터 구조](26)[가상메모리 동작] (0) | 2025.03.05 |
---|---|
[컴퓨터 구조](25)[가상 메모리] (0) | 2025.03.04 |
[컴퓨터 구조](23)[프로세스] (0) | 2025.02.28 |
[컴퓨터 구조](22)[제어흐름변경] (0) | 2025.02.27 |
[컴퓨터 구조](21)[ELF와 링커심볼] (0) | 2025.02.17 |