CS/컴퓨터 구조

[컴퓨터 구조](24)[프로세스 생성 & 종료]

황올뱀 2025. 3. 3. 18:40

프로세스의 생성과 종료(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
반응형