| |||||||||||||||
|
wait() : 부모 프로세스가 자식 프로세스가 종료했음을 확인하는 함수.
waitpid() : 인자로 프로세스ID를 받음으로써 특정 자식 프로세스의 종료를 기다릴수 있다.
함수원형
#include <sys/types.h> |
※ 자식 프로세스의 상태를 확인하는 매크로들
매크로 | 세부사항 |
WIFEXITED(status) | 0이 아닌 값을 리턴하면 자식프로세스가 정상종료했다는 뜻이다. |
WEXITSTATUS(status) | WIFEXITED(status)매크로를 통하여 자식 프로세스가 정상종료했음을 확인하면 이 매크로를 통하여 종료 코드를 확인할 수 있다. 이 종료 코드는 exit()나 _exit()에서 인자로 주는 값을 말한다. 즉 exit(0)으로 프로그램을 종료했다면 이 0 값이 WIFEXITED 매크로로 알수 있다. 단, 이 매크로는 하위 8비트 값만을 확인하므로 0부터 255까지의 값까지 확인할 수 있다. |
WIFSIGNALED(status) | 이 매크로가 참이라면 자식 프로세스가 비정상 종료했다는 뜻. |
WTERMSIG(status) | SIFSIGNALED(status)매크로가 참일 경우 자식 프로세스를 종료시킨 시그널 번호를 얻는 매크로 |
WIFSTOPPED(status) | 이 매크로가 참이면 자식 프로세스는 현재 멈춰있는(stopped) 상태이다. 다음에서 살펴볼 option인자에 WUNTRACED옵션이 설정되어 있는 경우 자식 프로세스의 멈춤 상태를 알아낼수 있다. |
WSTOPSIG(status) | WIFSTOPPED(status)매크로가 참일 경우 자식 프로세스를 멈춤상태로 만든 시그널번호를 얻는다. |
WCOREDUMP(status) | 시스템에 따라서는 WIFSIGNALED(status)가 참일 경우 자식 프로세스가 core덤프 파일을 생성했는지를 확인하는 이 매크로를 제공해주기도 한다. |
※ waitpid()에서 사용하는 pid인자값의 의미
pid의 값 | 세부사항 |
pid < -1 | pid의 절대값과 동일한 프로세스 그룹ID의 모든 자식 프로세스의 종료를 기다린다. |
pid == -1 | 모든 자식 프로세스의 종료를 기다린다. |
pid == 0 | 현재 프로세스의 프로세스 그룹ID와 같은 프로세스 그룹ID를 가지는 모든 자식 프로세스의 종료를 기다린다. |
pid > 0 | pid값에 해당하는 프로세스 ID를 가진 자식 프로세스의 종료를 기다린다. |
※ waitpid()에서 사용하는 option인자
인자 | 인자의 의미 |
WNOHANG | waitpid()를 실행했을 때, 자식 프로세스가 종료되어 있지 않으면 블록상태가 되지 않고 바로 리턴하게 해준다. |
WUNTRACED | pid에 해당하는 자식 프로세스가 멈춤 상태일 경우 그 상태를 리턴한다. |
시그널 종류 | 설명 |
SIGHUP | Hangup을 위한 시그널로 터미널과 시스템 사이에 통신 접속이 끊어졌을 때 터미널에 연결된 프로세스들에게 커널이 보내는 시그널이다. |
SIGINT | Interrupt를 위한 시그널로 유저가 인터럽트를 발생시키는 키를 입력했을 때 그와 연결된 프로세스에게 커널이 보내는 시그널이다. 이 시그널은 프로세스를 종료할 때 많이 사용되는 시그널이다. |
SIGQUIT | Quit를 위한 시그널로 유저가 터미널에서 Quit 키를 치면 커널이 프로세스에게 SIGQUIT 시그널을 보낸다. |
SIGILL | illegal 명령, 즉 비정상적인 명령을 수행할 때 OS가 발생시키는 시그널이다. |
SIGTRAP | Trace Trap을 위한 시그널로 디버거들이 주로 사용하는 시그널이다. |
SIGABRT | Abort 실행시 발생하는 시그널로 Abort는 시스템이 비정상적으로 종료될 때 해당 정보를 남기는 명령이다. |
SIGIOT | SIGABRT와 유사한 작업을 수행시 발생하는 시그널이다. |
SIGEMT | Emt 명령 실행시 사용되는 시그널이다. |
SIGFPE | Floating 포인터 예외사항, 즉 부동소수점 사용에서 오버플로우나 언더플로우가 발생했을 때 사용되는 시그널이다. |
SIGKILL | 프로세스가 다른 프로세스를 Kill 시키기 위해 발생하는 시그널이다. |
SIGBUS | Bus에러가 발생했을 때 사용되는 시그널이다. |
SIGSEGV | 메모리 세그먼트 등이 깨졌을 때 발생하는 시그널이다. |
SIGSYS | 시스템 호출을 할 때 잘못된 인수를 사용하면 발생하는 시그널이다. |
SIGPIPE | 파이프에서 사용하는 시그널로 아무도 읽지 않는 파이프에 데이터를 출력할 때 발생하는 시그널이다. |
SIGALRM | 알람 클락 시그널로 해당 타이머가 끝나면 발생되는 시그널이다. |
SIGTERM | kill에 의해 프로세스가 종료할 때 발생되는 시그널이다. |
'Program Language > C' 카테고리의 다른 글
format not a string literal and no format arguments (0) | 2011.11.11 |
---|---|
The Context Free Grammar Checker (0) | 2011.10.12 |
fopen 과 fscanf로 읽어들이기 (0) | 2011.05.31 |
exec함수 군 (0) | 2011.04.19 |
freopen (0) | 2011.03.31 |
댓글