리눅스 wait

wait의 동작은 다음과 같습니다:

  1. 부모 프로세스는 wait을 호출하여 자식 프로세스가 종료되길 기다립니다.
  2. 자식 프로세스가 종료되면, wait은 자식 프로세스의 상태 및 종료 상태를 가져옵니다.
  3. 부모 프로세스는 자식 프로세스의 종료 상태를 확인하고 필요한 조치를 취합니다.

wait 시스템 콜을 사용하는 예제 코드를 작성해보겠습니다. 아래의 코드는 부모 프로세스에서 자식 프로세스를 생성하고, 자식 프로세스가 종료될 때까지 대기하는 예제입니다.

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

int main() {
    pid_t pid, wpid;
    int status;

    pid = fork();

    if (pid == 0) {
        // 자식 프로세스의 동작
        printf("자식 프로세스\n");
        sleep(2); // 자식 프로세스를 2초 동안 대기시킴
        printf("자식 프로세스 종료\n");
        return 0;
    } else if (pid > 0) {
        // 부모 프로세스의 동작
        printf("부모 프로세스\n");

        // 자식 프로세스의 종료를 대기
        wpid = wait(&status);

        if (WIFEXITED(status)) {
            printf("자식 프로세스 ID: %d\n", wpid);
            printf("자식 프로세스 종료 상태: %d\n", WEXITSTATUS(status));
        } else {
            printf("자식 프로세스가 정상적으로 종료되지 않았습니다.\n");
        }

        printf("부모 프로세스 종료\n");
        return 0;
    } else {
        // fork 실패
        perror("fork 실패");
        return 1;
    }
}

위의 코드를 컴파일하고 실행하면, 부모 프로세스가 자식 프로세스의 종료를 대기하고, 자식 프로세스가 종료된 후에 결과를 출력합니다.

이렇게 wait을 사용하여 프로세스 간 통신 및 동기화를 할 수 있습니다. 이는 프로세스 간의 상태 및 데이터 동기화에 유용한 기능입니다. 현재 실행 중인 프로세스가 종료 될 때까지 대기하거나, 특정 상황이 발생할 때까지 대기하는 경우에 사용할 수 있습니다.

#linux #wait