리눅스 wait
wait의 동작은 다음과 같습니다:
- 부모 프로세스는 wait을 호출하여 자식 프로세스가 종료되길 기다립니다.
- 자식 프로세스가 종료되면, wait은 자식 프로세스의 상태 및 종료 상태를 가져옵니다.
- 부모 프로세스는 자식 프로세스의 종료 상태를 확인하고 필요한 조치를 취합니다.
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