설명

자식 프로세스 작업이 끝날 때 까지 대기하며, 자식 프로세스가 종료한 상태를 구합니다.

wait()함수를 실행하면 자식 프로세스가 종료될 때가지 대기하게 됩니다. 만일 자식 프로세스가 정상 종료하여, main()에서 return 으로 값을 반환하거나, 또는 exit()로 값을 반환하며 정상 종료했다면 wait( int *status) 에서 status의 변수 값의 상위 2번째 바이트에 반환 값을 저장합니다.

또는 어떤 시그널에 의해 종료되었다면 최하위 바이트에 시그널 번호가 저장됩니다. 즉,

8비트 8비트
정상 종료 프로세스 반환 값 0
비정상 종료 0 종료 시킨 시그널 번호
헤더 wait.h
형태 pid_t wait(int *status)
인수 int status 자식 프로세스 종료 상태
반환 pid_t 종료된 자식 프로세스 ID
예제
#include <stdio.h>
#include <unistd.h>
#include <wait.h>

int main()
{
   int   counter  = 1;
   int   status;
   pid_t pid;
   pid_t pid_child;

   pid   = fork();

   switch( pid)
   {
      case -1  :
      {
         printf( "자식 프로세스 생성 실패n");
         return -1;
      }
      case 0   :
      {
         printf( "저는 자식 프로세스로 5까지 카운트하고 종료하겠습니다.n");
         while( 6 > counter )
         {
            printf( "자식: %dn", counter++);
            sleep( 1);
         }
         return 99;
      }
      default  :
      {
         printf( "저는 부모 프로세스로 자식 프로세스 작업이 
끝날 때 까지 대기합니다..n");

         pid_child   = wait( &status);

         printf( "종료된 자식 프로세스 ID는 %d이며,", pid_child);
         if ( 255 < status)
         {
            printf( "정상적으로 종료되었고 반환값은 %d입니다n", status >> 8);
         }
         else
         {
            printf( "비 정상으로 종료되었고 종료 시그널 번호는 %d입니다n", status);
         }
         printf( "이제 제일을 처리하겠습니다.n");

         while( 1 )
         {
            printf( "부모: %dn", counter++);
            sleep( 1);
         }
      }
   }
}
]$ ./a.out
저는 자식 프로세스로 5까지 카운트하고 종료하겠습니다.
자식: 1
저는 부모 프로세스로 자식 프로세스 작업이 끝날 때 까지 대기합니다..
자식: 2
자식: 3
자식: 4
자식: 5
종료된 자식 프로세스 ID는 5484이며,정상적으로 종료되었고 반환값은 99입니다
이제 제일을 처리하겠습니다.
부모: 1
부모: 2
부모: 3
부모: 4
부모: 5
부모: 6
부모: 7
부모: 8 :