본문 바로가기
Language/C언어

C050_wait 함수 사용하기

by OdOp 관리자 2024. 1. 8.
SMALL

wait 함수는 자식 프로세스가 종료되기를 기다리는 것이다. 

 

본격적인 시작에 앞서서 fork에 대해 아직 잘 모르시는 분들은 아래의 링크를 참고해 주세요.

https://hig0617.tistory.com/134

 

wait 함수 설명을 하기에 앞서서 좀비 프로세스에 대해 조금은 알아야 할 필요가 있습니다. 

 

좀비 프로세스

좀비프로세스는 메모리를 차지하지 않고 디스크 용량, I/O, CPU 시간 또한 전혀 차지하지 않습니다. 

하지만 프로세스의 테이블 용량을 차지하게 됩니다. 

이때 엄청나게 많은 자식의 자식 프로세스들이 생긴다면 테이블의 용량이 가득 차게 되어 프로그램의 문제가 생길 수 있습니다. 

 

이를 예방하기 위해 완전히 끝남을 부모 프로세스에게 알려주어야 합니다. 이를 위해 wait함수를 사용하게 됩니다. 

 

wait

#include <sys/wait.h>

pid_t	wait(int *status);

 

wait 함수는 자식 프로세스가 종료될 때까지 무작정 기다리는 함수입니다. 

status에는 자식 프로세스 종료 시 나오는 return 값이나 exit의 인자값이 저장됩니다. 

마지막으로 반환값입니다. 성공 시 자식 프로세스의 ID, 실패 시 -1을 반환해 줍니다. 

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

int main(void)
{
    int num;
    int status;
    pid_t newpid;

    num = 10;
    newpid = fork();
    if (newpid < 0)
    {
        perror(NULL);
        return (1);
    }
    if (newpid == 0)
    {
        printf("this is child process.\n");
        num *= 2;
        printf("%d\n", num);
        printf("child process finish.\n");
    }
    else 
    {
        wait(&status);
        printf("this is parent process.\n");
        num *= -2;
        printf("%d\n", num);
        printf("parent process finish.\n");
    }
    return (0);
}

 

위와 같이 코드를 작성하면 자식 프로세스를 실행 후에 부모프로세스를 실행하게 됩니다. 

출력값입니다. 

this is child process.
20
child process finish.
this is parent process.
-20
parent process finish.

 

 

무한 루프....

wait함수의 치명적인 단점은 무한 루프입니다. 

만약 자식 프로세스가 무한 루프에 빠져있다면 wait함수는 종료되지 않습니다. 

이러한 문제를 어떻게 해결해야 할까요?? 내일 해결 방법에 대해 알아보도록 하겠습니다. 

LIST

'Language > C언어' 카테고리의 다른 글

C052_dup 함수 사용하기  (0) 2024.01.10
C051_waitpid 함수 사용하기  (1) 2024.01.09
C049_fork 함수 사용하기  (2) 2024.01.07
C048_unlink 함수 사용하기  (0) 2024.01.06
C047_access 함수 사용하기  (2) 2024.01.05