반응형
waitpid 함수는 wait 함수처럼 자식 프로세스를 기다릴때 사용하는 함수
자식 프로세스의 종료상태를 회수할 때 사용
- waitpid 함수는 자식 프로세스가 종료될 때 까지 차단되는 것을 원하지 않을 경우, 옵션을 사용하여 차단을 방지 가능
#include <sys/wait.h>
pid_t waitpid(pid_t pid, int *statloc , int options);
- 성공 : 프로세스 ID 반환
- 오류 : -1
첫 번째 인자
pid가 -1 일 경우 (pid == -1) | 임의의 자식 프로세스를 기다림 |
pid가 0 보다 클 경우 (pid > 0) | 프로세스 ID가 pid인 자식 프로세스를 기다림 |
pid가 -1 보다 작을 경우 (pid < -1) | 프로세스 그룹 ID가 pid의 절댓값과 같은 자식 프로세스를 기다림 |
pid가 0일 경우 (pid == 0) | waitpid를 호출한 프로세스의 프로세스 그룹 PID와 같은 프로세스 그룹 ID를 가진 프로세스를 기다림 |
waitpid 함수의 오류(-1)는 지정한 pid의 프로세스 또는 프로세스 그룹이 없는 경우에 발생하며 그리고 pid가 자식 프로세스가 아닐 때 발생.
두 번째 인자
waitpid 함수 반환 값 두 번째 인자 인 statloc 값
빈칸 waitpid 함수 반환 값 두 번째 인자 인 statloc 값
세 번째 인자
세 번째 인자로 사용가능한 상수 의미
WCONTINUED | 중단 되었다가 재개된 자식 프로세스의 상태를 받음 |
WNOHANG | 기다리는 PID가 종료되지 않아서 즉시 종료 상태를 회수 할 수 없는 상황에서 호출자는 차단되지 않고 반환값으로 0을 받음 |
WUNTRACED | 중단된 자식 프로세스의 상태를 받음 |
waitpid 세 번째 인자에 0을 넣으면 wait과 똑같이 동작함.
예제
#include <stdio.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
#include <stdlib.h>
int main()
{
int pid;
pid = fork();
if (pid == 0)
{
puts("자식 프로세스");
//sleep(3);
//exit(0);
}
else
{
while(waitpid(pid, NULL, WNOHANG) == 0)
{
puts("부모 프로세스 ");
sleep(1);
}
}
}
//자식 프로세스가 살아있을 동안 waitpid를 걸어주면 그게 그만큼 실행된다.
[스카웃 C언어 강좌] 37-2 wait, waitpid 함수
[스카웃 C언어 강좌] 37-2 wait, waitpid 함수
[스카웃 C언어 강좌] 37-2 wait, waitpid 함수 머리말&#...
blog.naver.com
waitpid 함수 사용하기(wait함수와 비교)
waitpid 함수는 wait 함수처럼 자식 프로세스를 기다릴때 사용하는 함수입니다. 즉, 자식 프로세스의 종료상태를 회수할 때 사용합니다. 하지만 waitpid 함수는 자식 프로세스가 종료될 때 까지 차단
codetravel.tistory.com
반응형