리눅스 명령 배우기 - 대기

이름

wait, waitpid - 프로세스 종료 대기

개요

#include
#include

pid_t wait (int * status );
pid_t waitpid (pid_t pid , int * 상태 , int 옵션 );

기술

wait 함수는 자식 프로세스가 종료 할 때까지 또는 현재 프로세스를 종료하거나 신호 처리 함수를 호출하는 동작이있는 신호가 전달 될 때까지 현재 프로세스의 실행을 일시 중단합니다. 자녀가 통화 시간 (소위 "좀비"프로세스)까지 이미 종료 한 경우 함수는 즉시 반환됩니다. 하위 시스템이 사용하는 시스템 자원은 모두 해제됩니다.

waitpid 함수는 pid 인수에 의해 지정된 자식이 종료 될 때까지 또는 현재 프로세스를 종료하거나 신호 처리 함수를 호출하는 조치가있는 신호가 전달 될 때까지 현재 프로세스의 실행을 일시 중단합니다. pid 에서 요청한 자식이 호출 시간 (소위 "좀비"프로세스)으로 이미 종료 한 경우 함수는 즉시 반환됩니다. 하위 시스템이 사용하는 시스템 자원은 모두 해제됩니다.

pid 의 값은 다음 중 하나 일 수 있습니다.

<-1

이것은 프로세스 그룹 ID가 pid 의 절대 값과 같은 자식 프로세스를 기다리는 것을 의미한다.

-1

어떤 자식 프로세스를 기다리는 것을 의미합니다. 이것은 전시품을 기다리는 것과 같은 행동입니다.

0

이는 프로세스 그룹 ID 가 호출 프로세스의 ID 와 동일한 모든 하위 프로세스를 기다리는 것을 의미합니다.

> 0

이것은 프로세스 ID가 pid 의 값과 같은 자식을 기다리는 것을 의미합니다.

옵션 의 값은 0 이상의 다음 상수의 OR입니다.

WNOHANG

이는 출생 한 아이가없는 경우 즉시 반환한다는 의미입니다.

무뚝뚝한

이는 또한 정지 된 아동과 그 상태가보고되지 않은 아동에게 돌아 오는 것을 의미합니다.

(Linux 전용 옵션은 아래를 참조하십시오.)

statusNULL 이 아닌 경우 wait 또는 waitpid상태 가 가리키는 위치에 상태 정보를 저장 합니다 .

이 상태는 다음 매크로로 평가할 수 있습니다 (이 매크로는 stat 버퍼 ( int )를 인수로 취합니다 --- 버퍼에 대한 포인터가 아닙니다!) :

WIFEXITED ( 상태 )

자식이 정상적으로 종료하면 0이 아닙니다.

WEXITSTATUS ( 상태 )

exit () 호출에 대한 인수로 또는 주 프로그램의 return 문에 대한 인수로 설정되었을 수있는 종료 된 하위 반환 코드의 최하위 8 비트를 평가합니다. WIFEXITED 가 0이 아닌 경우에만이 매크로를 평가할 수 있습니다.

WIFSIGNALED ( 상태 )

걸리지 않은 신호로 인해 자식 프로세스가 종료되면 true를 반환합니다.

WTERMSIG ( 상태 )

자식 프로세스의 종료를 유발 한 신호의 번호를 반환합니다. WIFSIGNALED 가 0이 아닌 경우에만이 매크로를 평가할 수 있습니다.

WIFSTOPPED ( 상태 )

반환을 야기한 자식 프로세스가 현재 중지 된 경우 true를 반환합니다. 이 호출은 WUNTRACED를 사용하여 완료된 경우에만 가능합니다.

WSTOPSIG ( 상태 )

자식을 멈추게하는 신호의 번호를 반환합니다. 이 매크로는 WIFSTOPPED 가 0이 아닌 값을 반환 한 경우에만 평가할 수 있습니다.

일부 유닉스 버전 (예 : Linux, Solaris, AIX, SunOS는 제외)은 WCOREDUMP 매크로 ( 상태 ) 를 정의하여 자식 프로세스가 코어를 덤프했는지 여부를 테스트합니다. #ifdef WCOREDUMP ... #endif에 동봉하여 사용하십시오.

반환 값

종료 한 자식의 프로세스 ID. WNOHANG 이 사용되고 자식이없는 경우 0, 오류시 -1 ( errno 가 적절한 값으로 설정된 경우).

오류

에셜

에서 지정된 프로세스 pid 가 존재하지 않거나 호출 프로세스의 하위 요소가 아닙니다. (이것은 SIGCHLD에 대한 동작이 SIG_IGN으로 설정된 경우 자기 자식에게 발생할 수 있습니다. 스레드에 관한 LINUX NOTES 섹션도 참조하십시오.)

EINVAL

옵션 인수가 무효 인 경우

EINTR

WNOHANG 이 설정되지 않고 차단되지 않은 신호 또는 SIGCHLD 가 발견 된 경우