'programming'에 해당되는 글 387건

  1. 2014.01.14 wait, waitpid

wait, waitpid

programming/C_C++ 2014. 1. 14. 19:44
반응형


/* wait, waitpid */

pid_t wait(int *stat);                              // 성공시 종료된 자식 프로세서의 ID를 반환하고 실패시 -1을 반환한다.
pid_t waitpid(pid_t pid, int *stat, int options);   // 실패시 -1을 리턴하고 성공시에 0이나 혹은 종료된 자식 프로세서의 pid를 리턴한다.
                                                    // pid > 0일 경우 pid 값에 해당하는 프로세서ID값을 가진 자식 프로세서의 종료를 대기한다.
                                                    // pid = 0일 경우 프로세서 그룹ID가 호출 프로세서ID와 같은 자식 프로세서를 기다린다.
                                                    // pid = -1일 경우 임의의 자식 프로세서를 기다린다. wait와 같다.
                                                    // pid < -1일 경우 프로세서 그룹ID가 pid의 절대값과 같은 자식 프로세서의 종료를 기다린다.


pid = waitpid( -1, &status, WNOHANG );

/* wait 함수 호출 이후 상태 확인 */

#define WIFEXITED(stat)     ((int)((stat)&0xFF) == 0)                                 // 자식프로세서가 정상 종료한 경우 참을 반환한다.
#define WIFSIGNALED(stat)   ((int)((stat)&0xFF) > 0 && (int)((stat)&0xFF00) == 0)     // 자식프로세서가 비정상 종료한 경우 참을 반환한다.
#define WIFSTOPPED(stat)    ((int)((stat)&0xFF) == 0177 && (int)((stat)&0xFF00) != 0) // 자식프로세서가 멈춰 있는 경우 참을 반환한다.
#define WEXITSTATUS(stat)   ((int)(((stat)>>8)&0xFF))                                 // 자식프로세서의 전달값(프로세서에서 반환된 정수 or exit인자)을 반환한다. 단, 이값은 하위 8bit의 값만을 확인한다. 즉 0~255까지 확인가능한다.
#define WTERMSIG(stat)      ((int)((stat)&0x7F))                                      // WIFSIGNALED 매크로가 참이라면 자식을 종료시킨 Signal번호를 확인한다.
#define WSTOPSIG(stat)      ((int)(((stat)>>8)&0xFF))                                 // WIFSTOPPED 매크로가 참이라면 자식은 멈춘 상태로 만든 Signal번호를 확인한다.

 

/*arguments to wait functions options */

#define WUNTRACED   0004    /* wait for processes stopped by signals */  // 종료된 자식 프로세서가 종료되지 않아도 Blocking 상태가 되지 않고 0을 반환한다.
#define WNOHANG     0100    /* non blocking form of wait    */           // 자식 프로세서가 멈춰있는지 확인해서 멈추었다면 그상태를 리턴한다.

 

반응형
Posted by 공간사랑
,