waitpid 리눅스

리눅스 운영 체제에서 waitpid() 함수는 자식 프로세스의 종료를 기다리거나 상태를 확인하는 데 사용됩니다. 이 함수는 pid_t 타입의 자식 프로세스 ID를 매개변수로 받으며, 일반적으로 fork() 함수로 생성된 자식 프로세스의 ID를 사용합니다.

waitpid() 함수의 문법

#include <sys/wait.h>

pid_t waitpid(pid_t pid, int *status, int options);

waitpid() 함수의 동작 방식

waitpid() 함수는 자식 프로세스가 종료될 때까지 호출한 프로세스를 차단합니다. 자식 프로세스가 종료되면 해당 자원을 회수하고 종료 상태를 반환합니다. 이 때 종료 상태는 status 매개변수를 통해 얻을 수 있습니다.

waitpid() 함수가 반환하는 값은 대기한 자식 프로세스의 ID입니다. 만약 대기 중인 자식 프로세스가 없다면, 반환값은 -1입니다.

waitpid() 함수의 옵션

waitpid() 함수의 옵션 매개변수인 options는 대기 동작에 추가적인 옵션을 설정할 수 있는데, 여러 개의 옵션을 포함하는 비트 마스크로 구성됩니다.

주요 옵션은 다음과 같습니다:

waitpid() 함수의 예제 코드

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>

int main() {
    pid_t pid = fork();

    if (pid < 0) {
        perror("fork() error");
        exit(1);
    } else if (pid == 0) {
        printf("Child process\n");
        sleep(5);
    } else {
        printf("Parent process\n");
        waitpid(pid, NULL, 0);
        printf("Child process terminated\n");
    }

    return 0;
}

위 코드는 부모 프로세스에서 자식 프로세스를 생성하고, waitpid() 함수를 사용하여 자식 프로세스가 종료될 때까지 대기합니다. 자식 프로세스는 5초 동안 실행되고 종료됩니다.

이 예제에서 waitpid() 함수의 두 번째 매개변수인 statusNULL로 설정되어 자식 프로세스의 종료 상태를 확인하지 않습니다.