프로세스의 종료를 기다린다.
#include <sys/types.h> #include <sys/wait.h> pid_t waitpid(pid_t pid, int *status, int options);
waitpid 함수는 인수로 주어진 pid 번호의 자식프로세스가 종료되거나, 시그널 함수를 호출하는 신호가 전달될때까지 waitpid 호출한 영역에서 일시 중지 된다.
만일 pid 로 지정된 자식이 waitpid 함수 호출전에 이미 종료되었다면, 함수는 즉시 리턴하고 자식프로세스는 "좀비프로세스"로 남는다.
pid 값은 다음중 하나가 된다.
프로세서 그룹 ID가 pid 의 절대값과 같은 자식 프로세스를 기다린다.
임의의 자식프로세스를 기다린다. 이것은 wait(2) 와 동일하다.
프로세스 그룹 ID가 호출 프로세스의 ID와 같은 자식프로세스를 기다린다.
프로세스 ID가 pid 의 값과 같은 자식 프로세스를 기다린다.
options 의 값은 0이거나 다음값들과의 OR 이다.
이것은 어떤 자식도 종료되지 않았더라도, 즉시 리턴하란 뜻이다.
멈추거나 상태가 보고되지 않은 자식들을 위해 리턴
status 는 프로세스의 상태를 가져오기 위해서 사용한다. status 가 NULL 이 아닐경우 status 가 가리키는 위치에 프로세스의 상태정보를 저장한다. 다음의 메크로들을 통해서 상태정보를 알아가져올수 있다.
자식이 정상적으로 종료되었다면 non-zero 이다.
exit()를 호출하기 위한 인자나 return 값이 설정되고 종료된 자식의 반환 코드의 최하위 8비트를 평가한다. 이 매크로는 정상정료 - WIFEXITED(status) - 일때만 평가된다.
자식프로세스가 어떤 신호때문에 종료되었다면 참을 반환한다.
자식프로세스를 종료하도록한 신호의 번호를 반환한다. 당연히 WIFSIGNALED 가 non_zero 일 경우에만 사용할수 있다.
반환의 원인이 된 자식프로세스가 현재 정지되어 있다면 참을 반환한다.
자식을 정지하도록 야기한 신호의 숫자를 반환한다. WIFSTOPPED가 non-zero 일경우에만 사용할수 있다.
종료된 자식 프로세스의 ID는 에러일때 -1반환 하고, 만일 WNOHANG 가 사용되고 어떤 자식도 이용할수 없다면 0을 반환한다.
pid 로 지정된 프로세스가 존재하지 않거나, 호출한 프로세스의 자식이 아닐경우
options 인자가 유효하지 않을경우
WNOHANG 가 설정되어 있지 않고 신호가 봉쇄되지 않았거나 SIGCHLD가 잡혔을때
시스템에 연산을 위해서 이용할수 있는 자원이 부족할때
#include <sys/types.h> #include <sys/wait.h> #include <unistd.h> #include <string.h> int main() { int pid; int status; pid = fork(); if (pid < 0) { perror("fork error : "); exit(0); } if (pid == 0) { printf("Im Child\n"); sleep(10); return 2; } else { printf("Parent: wait (%d)\n", pid); waitpid(pid, &status, 0); if (WIFEXITED(status)) { printf("정상종료\n"); printf("리턴값 %d\n", WEXITSTATUS(status)); } else if (WIFSIGNALED(status)) { printf("신호받았음\n"); printf("신호번호 %d\n", WTERMSIG(status)); } } exit(0); }
Copyrights © - Joinc, All Rights Reserved. Inherited From - Yundream Rebranded By - Joonphil
1장. waitpid(2)
프로세스의 종료를 기다린다.
1.1절. 사용법
1.2절. 설명
waitpid 함수는 인수로 주어진 pid 번호의 자식프로세스가 종료되거나, 시그널 함수를 호출하는 신호가 전달될때까지 waitpid 호출한 영역에서 일시 중지 된다.
만일 pid 로 지정된 자식이 waitpid 함수 호출전에 이미 종료되었다면, 함수는 즉시 리턴하고 자식프로세스는 "좀비프로세스"로 남는다.
pid 값은 다음중 하나가 된다.
프로세서 그룹 ID가 pid 의 절대값과 같은 자식 프로세스를 기다린다.
임의의 자식프로세스를 기다린다. 이것은 wait(2) 와 동일하다.
프로세스 그룹 ID가 호출 프로세스의 ID와 같은 자식프로세스를 기다린다.
프로세스 ID가 pid 의 값과 같은 자식 프로세스를 기다린다.
options 의 값은 0이거나 다음값들과의 OR 이다.
이것은 어떤 자식도 종료되지 않았더라도, 즉시 리턴하란 뜻이다.
멈추거나 상태가 보고되지 않은 자식들을 위해 리턴
status 는 프로세스의 상태를 가져오기 위해서 사용한다. status 가 NULL 이 아닐경우 status 가 가리키는 위치에 프로세스의 상태정보를 저장한다. 다음의 메크로들을 통해서 상태정보를 알아가져올수 있다.
자식이 정상적으로 종료되었다면 non-zero 이다.
exit()를 호출하기 위한 인자나 return 값이 설정되고 종료된 자식의 반환 코드의 최하위 8비트를 평가한다. 이 매크로는 정상정료 - WIFEXITED(status) - 일때만 평가된다.
자식프로세스가 어떤 신호때문에 종료되었다면 참을 반환한다.
자식프로세스를 종료하도록한 신호의 번호를 반환한다. 당연히 WIFSIGNALED 가 non_zero 일 경우에만 사용할수 있다.
반환의 원인이 된 자식프로세스가 현재 정지되어 있다면 참을 반환한다.
자식을 정지하도록 야기한 신호의 숫자를 반환한다. WIFSTOPPED가 non-zero 일경우에만 사용할수 있다.
1.3절. 반환값
종료된 자식 프로세스의 ID는 에러일때 -1반환 하고, 만일 WNOHANG 가 사용되고 어떤 자식도 이용할수 없다면 0을 반환한다.
1.4절. 에러
pid 로 지정된 프로세스가 존재하지 않거나, 호출한 프로세스의 자식이 아닐경우
options 인자가 유효하지 않을경우
WNOHANG 가 설정되어 있지 않고 신호가 봉쇄되지 않았거나 SIGCHLD가 잡혔을때
시스템에 연산을 위해서 이용할수 있는 자원이 부족할때
1.5절. 예제
Recent Posts
Archive Posts
Tags