리눅스 waitpid 예제

Uncategorized by nrhpadmin

waitpid 함수는 종료된 자식의 프로세스 ID를 반환하고 statloc이 가리키는 메모리 위치에 자식의 종료 상태를 저장합니다. 대기를 사용하면 호출 프로세스에 자식이 없는 경우 유일한 실수가 발생합니다. (신호에 의해 함수 호출이 중단되는 경우 또 다른 오류 반환이 가능합니다. 10장에서 이에 대해 설명하겠습니다.) 그러나 waitpid를 사용하면 지정된 프로세스 또는 프로세스 그룹이 존재하지 않거나 호출 프로세스의 자식이 아닌 경우 오류가 발생할 수도 있습니다. POSIX.1-2001은 SIGCHLD의 처리가 SIG_IGN으로 설정되거나 SIgCHLD에 대해 SA_NOCLDWAIT 플래그가 설정된 경우(sigaction(2)참조)를 지정한 다음 종료하는 어린이는 좀비가 되지 않으며 모든 자녀가 있을 때까지 대기() 또는 waitpid()를 호출하지 않도록 지정합니다. errnoset을 ECHILD로 설정하면 실패합니다. (원래 POSIX 표준은 SIGCHLD를 SIG_IGN으로 지정하는 동작을 지정하지 않았습니다.) Linux 2.6은 이 사양을 준수합니다. 그러나 Linux 2.4(및 이전)는 SIGCHLD가 무시되는 동안 wait() 또는 waitpid() 호출이 수행되는 경우 SIGCHLD가 무시되지 않는 것처럼, 즉 다음 자식이 종료될 때까지 호출 블록이 종료되고 프로세스 ID를 반환하고 그 아이의 상태. 다음 Linux 관련 옵션은 복제(2)를 사용하여 만든 자식과 함께 사용할 수 있습니다. waitid() 및 waitpid() 함수는 호출자의 자식 프로세스 중 하나에 관련된 상태 정보를 얻어야 합니다. 다양한 옵션을 사용하면 종료또는 중지된 자식 프로세스에 대해 상태 정보를 얻을 수 있습니다. 둘 이상의 자식 프로세스에 대해 상태 정보를 사용할 수 있는 경우 해당 상태가 보고되는 순서는 지정되지 않습니다. 3.

waitpid 함수에 대한 선택적 작업을 지정합니다. 다음 옵션 플래그 중 하나를 지정하거나 비트 포함 OR 연산자와 결합할 수 있습니다: wait 함수는 자식 프로세스가 종료될 때까지 호출을 차단할 수 있지만 waitpid에는 차단을 방지하는 옵션이 있습니다. waitid() 시스템 호출(Linux 2.6.9 이후 사용 가능)은 대기할 자식 상태 변경을 보다 정밀하게 제어할 수 있습니다. waitpid 함수는 WUNtrACED 및 WCONTINUED 옵션을 통해 작업 제어를 지원합니다. FreeBSD 5.2.1, 리눅스 2.4.22, 맥 OS X 10.3, 그리고 솔라리스 9 모두 WCOREDUMP 매크로를 지원합니다. posix_swn() 또는 posix_spawnp() 또는 posix_spawnp()에 의해 생성된 프로세스에 대해 wait() 또는 waitpid()로 반환되는 상태 값이 posix_swn() 또는 posix_spawnp 후에 부모의 프로세스 그룹에 신호를 전송하는 경우 WIFSIGNALED(stat_val)를 나타낼 수 있는지 여부는 지정되지 않습니다. ()라고 합니다. 대기() 또는 waitpid() 보고서 상태가 있는 추가 구현 정의 상황이 있을 수 있습니다. 호출 프로세스 또는 자식 프로세스 중 하나가 비표준 확장을 명시적으로 사용하지 않는 한 이러한 문제는 발생하지 않습니다. 이러한 경우 보고된 상태의 해석은 구현 정의됩니다. (waitpid() 또는 waitid()) )) pid(waitpid()) 또는 idtype 및 id(waitid)))에 의해 지정된 프로세스가 존재하지 않거나 호출 프로세스의 자식이 아닙니다.

SIGCHLD에 대한 작업이 SIG_IGN으로 설정된 경우 자녀에게 이러한 일이 발생할 수 있습니다. 스레드에 대한 Linux Notes 섹션도 참조하십시오.) 앞서 언급했듯이, 자녀가 두 명 이상인 경우, 자녀가 종료될 때까지 기다립니다. 특정 프로세스가 종료될 때까지 기다려야 하는 경우(기다려야 할 프로세스 ID를 알고 있다고 가정)? 이전 버전의 UNIX 시스템에서는 wait를 호출하고 반환된 프로세스 ID를 관심 있는 프로세스 ID와 비교해야 합니다.