#include <sys/types.h>
#include <sys/wait.h>
pit_t wait(int *status);
이 함수를 실행하면 자식이 죽을 때까지 블럭 된다. 종료될 때 받은 status값을 아래 매크로?함수?를 통해 상태를 파악할 수 있다.
- int WIFEXITED(status) : 정상 종료인지
- int WEXITSTATUS(status) : 종료시 상태값 (0, 에러...)
- int WIFSIGNALED(status) : 시그널 받았는 지
- int WTERMSIG(status) : 그 때의 시그널 값
- int WIFSTOPPED(status) : ... 주로 디버깅 때 사용
- int WSTOPSIG(status) : 프로세스를 멈춘 시그널
- int WIFCONTINUED(status) : ... 주로 디버깅 때 사용
- int WCOREDUMP(status) : 코어 생겼는지.
모든 프로세스에 대하여 생사여부(?)를 기다리는 wait외에도 특정 pid에 대해 wait 할 수 있는데, 이게 waitpid()이다.
#include <sys/types.h>
#include <sys/wait.h>
pid_t waitpid(pid_t pid, int *status, int options);
pid에 체크할 프로세스 번호 외에 음수 즉 -500같은 값을 넣으면 프로세스 그룹 아이디가 500인 것들에 대해 기다리고, -1은 모든 자식에 대해(wait()과 같다) 기다린다. 0인 경우는 자신과 같은 프로세스 그룹에 대해 기다린다. options에는 WNOHANG을 줘서 nonblock으로 실행할 수 있다.
이외에도 더좀 더 다향한 방법으로 사용할 수 있는 함수로 waitid()가 있다.
No comments:
Post a Comment