티스토리 뷰

Linux

wait(), waitpid()

정든친구 2019. 8. 24. 13:32

#include <sys/types.h>

#include <sys/wait.h>

 

pid_t wait(int *status);

pid_t waitpid(pid_t pid, int *status, int options);

 

** 주의 **

부모 프로세스는 모든 자식 프로세스에 관해 wait()를 통해 자식 프로세스의 종료를 확인해 주어야 한다.

자식 프로세스가 종료된 후에 그 종료를 부모 프로세스에게 알리고, 부모 프로세스가 wait()를 통해 자식 프로세스의 종료를 확인하기까지 자식 프로세스의 정보는 커널에 남아있다.

 

즉, 자식 프로세스가 종료 되어도 몇몇 정보는 프로세스 테이블에 존재하고, 부모 프로세스가 자식 프로세스의 종료를 wait()로 확인해 줘야 비로소 자식 프로세스가 사용한 모든 메모리 영역이 완전히 해제된느 것이다. 이렇게 종료 되었지만 부모 프로세스가 아직 그 종료를 확인하지 않는 프로세스를 좀비 프로세스라 한다.

 

 

*** 자식 프로세스의 상태를 확인하는 매크로들

매크로 세부 사항
WIFEXITED(status) 0이 아닌 값을 리턴하면 자식 프로세스가 정상 종료
WEXITSTATUS(status) WIFEXITED(status) 매크로를 통해 자식 프로세스가 정상 종료했음을 확인하면, 이 매크로를 통해 종료 코드를 확인할 수 있다. 이 종료코드는 exit()나 _exit()에서 인자로 주는 값이다.
단, 이 매크로는 하위 8비트 값만을 확인하므로 0~255까지의 값만 확인할 수 있다.
WIFSIGNALED(status) 이 매크로가 참이라면 자식 프로세스는 비정상 종료했다는 뜻이다.
WTERMSIG(status) SIFSIGNALED(status) 매크로가 참인 경우 자식 프로세스를 종료시킨 시그널 번호를 얻는 매크로
WIFSTOPPED(status) 이 매크로가 참이면 자식 프로세스는 현재 멈춰있는(stopped) 상태. 다음에 살펴볼 option 인자에 WUNTRACED 옵션이 설정되어 있는 경우 자식 프로세스의 멈춤 상태를 알아낼 수 있다.
WSTOPSIG(status) WIFSTOPPED(status) 매크로가 참인 경우 자식 프로세스를 멈춤 상태로 만든 시그널 번호를 얻는다.
WCOREDUMP(status) 시스템에 따라 WIFSIGNALED(status)가 참일 경우 자식 프로세스가 core 덤프 파일을 생성했는지를 확인하는 이 매크로를 제공해 주기도 한다.

*** pid 인자 값의 의미

pid 설명
pid < -1 pid의 절대 값과 동일 프로세스 그룹 ID의 모든 자식 프로세스의 종료를 기다린다.
pid == -1 모든 자식 프로세스의 종료를 기다린다. 만일 pid 값이 -1이면 waitpid 함수는 wait함수와 동일하다.
pid == 0 pid 값이 0일 경우 현재 프로세스의 프로세스 그룹 ID와 같은 프로세스 그룹 ID를 가지는 모든 자식 프로세스의 종료를 기다린다. 
pid > 0 pid 값에 해당하는 프로세스 ID를 가진 자식 프로세스의 종료를 기다린다.

*** waitpid()의 option 인자들

인자 인자의 의미
WNOHANG 이 옵션은 waitpid()를 실행했을 때, 자식 프로세스가 종료되어 있지 않으면 블록 상태가 되지 않고 바로 리턴하게 해준다.
WUNTRACED pid에 해당하는 자식 프로세스가 멈춤 상태일 경우 그 상태를 리턴한다. 즉, 프로세스의 종료뿐 아니라 프로세스의 멈춤 상태도 찾아낸다.

'Linux' 카테고리의 다른 글

Elementary OS 명령줄 종료  (0) 2019.08.25
exec 함수  (0) 2019.08.24
umask()  (0) 2019.08.22
유닉스의 파일스스템  (0) 2019.08.22
time 명령으로 프로그램 실행시간 측정  (0) 2019.08.22
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
글 보관함