wait 함수 리눅스
리눅스에서 wait 함수는 부모 프로세스가 자식 프로세스의 실행이 종료되기를 기다리는 데 사용됩니다. 이 함수는 자식 프로세스가 종료될 때까지 부모 프로세스의 실행을 일시적으로 멈추게 합니다.
wait 함수의 구문
wait 함수는 다음과 같은 구문을 가지고 있습니다:
pid_t wait(int* status);
status
: 자식 프로세스의 종료 상태를 저장할 포인터입니다. 자세한 내용은 아래에서 설명하겠습니다.- 반환 값: 종료된 자식 프로세스의 PID를 반환합니다. 만약 에러가 발생할 경우 -1을 반환합니다.
자식 프로세스의 종료 상태
wait 함수를 사용하여 자식 프로세스의 종료 상태를 확인할 수 있습니다. 이는 wait 함수를 호출한 후 status
변수에 저장되는 값으로 나타납니다.
if (WIFEXITED(status)) {
// 자식 프로세스가 정상적으로 종료됨
int exit_status = WEXITSTATUS(status);
// 종료 상태 처리
}
WIFEXITED(status)
: 자식 프로세스가 정상 종료된 경우true
를 반환합니다.WEXITSTATUS(status)
: 정상 종료된 자식 프로세스의 종료 상태를 반환합니다.
예제 코드
다음은 wait 함수를 사용하는 예제 코드입니다:
#include <stdio.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
int main() {
pid_t pid = fork();
if (pid == 0) {
// 자식 프로세스 코드
printf("자식 프로세스 실행\n");
sleep(3);
printf("자식 프로세스 종료\n");
return 0;
} else if (pid > 0) {
// 부모 프로세스 코드
printf("부모 프로세스 실행\n");
int status;
pid_t child_pid = wait(&status);
if (child_pid == -1) {
printf("자식 프로세스 대기 중 에러 발생\n");
} else {
if (WIFEXITED(status)) {
int exit_status = WEXITSTATUS(status);
printf("자식 프로세스 종료 상태: %d\n", exit_status);
}
}
} else {
fprintf(stderr, "포크 실패\n");
return 1;
}
return 0;
}
이 예제 코드는 부모 프로세스가 자식 프로세스의 실행이 종료될 때까지 기다린 후 자식 프로세스의 종료 상태를 출력합니다.
결론
리눅스에서 wait 함수는 부모 프로세스가 자식 프로세스의 실행을 기다리고 종료 상태를 확인하는 데 사용됩니다. 이를 이용하여 프로세스 간의 동기화와 자식 프로세스의 정상 종료 여부를 확인할 수 있습니다.