리눅스 waitpid 예제

리눅스 waitpid 예제

그것은 어떤 리눅스 / 유닉스 기반 운영 체제에서 포크와 vfork 시스템 호출을 이해하는 것이 좋다는 것을 발견, 그들이 어떻게 동작, 우리가 그들을 사용하는 방법과 그들 사이의 차이. 이러한 대기 및 exec 시스템 호출과 함께 프로세스 스폰 및 기타 다양한 관련 작업에 사용됩니다. 상태가 NULL이 아닌 경우 wait() 및 waitpid()는 가리키는 int에 상태 정보를 저장합니다. 이 정수는 다음과 같은 매크로로 검사 할 수 있습니다 (이는 인수로 정수 자체를, 그것에 대한 포인터가 아닌, wait() 및 waitpid(!)에서 수행되는 것처럼: 나는 리눅스 민트 19 XFCE의 가상 터미널에서 첫 번째 예제를 시도하고 오류를 생성 : } } 다른 { / * * 부모에 의해 실행 코드 * / 수행 { w = 웨이트 파이드 (cpid, 및 상태, WUNTRACED | WCONTINUED); (w == -1) {perror(“waitpid”); 출구(EXIT_FAILURE); } 프로세스가 정상적으로 또는 비정상적으로 종료되면 커널은 SIGCHLD 신호를 부모에게 전송하여 부모에게 알리고 있습니다. 자식의 종료는 비동기 이벤트이기 때문에 부모가 실행되는 동안 언제든지 발생할 수 있습니다이 신호는 커널에서 부모에 대한 비동기 알림입니다. 부모는 이 신호를 무시하도록 선택하거나 신호가 발생할 때 호출되는 함수인 신호 처리기를 제공할 수 있습니다. 이 신호의 기본 동작은 무시해야 합니다. 10장에서 이러한 옵션을 설명합니다. 지금은 wait 또는 waitpid를 호출하는 프로세스가 waitpid(1) waitpid() pid 인수에 의해 지정된 자식이 종료될 때까지 또는 신호가 전달될 때까지 현재 프로세스의 실행을 일시 중단한다는 점에 유의해야 합니다. _POSIX_REALTIME_SIGNALS가 정의되고 구현이 SIGCHLD 신호를 큐에 대기하는 경우, 자식 프로세스의 상태를 사용할 수 있기 때문에 wait() 또는 waitpid()가 반환되는 경우 자식 프로세스의 프로세스 ID와 연결된 보류 중인 SIGCHLD 신호는 삭제.

보류 중인 다른 SIGCHLD 신호는 보류 중입니다. 옵션 인수를 사용하면 waitpid의 작업을 더 제어 할 수 있습니다. 이 인수는 0이거나 그림 8.7의 상수의 비트오에서 생성됩니다. waitpid는 자식 프로세스가 종료될 때까지 호출을 차단할 수 있지만 waitpid에는 호출을 차단하지 않는 옵션이 있습니다. posix_swn() 또는 posix_spawnp() 에 의해 생성된 프로세스에 대해 wait() 또는 waitpid()에 의해 반환되는 상태 값이 후속 호출 대기() 또는 waitpid() 앞에 WIFSTOPPED(stat_val)를 나타낼 수 있는지 여부는 지정되지 않습니다. 새 프로세스 이미지 실행이 시작되기 전에 검색된 오류의 결과입니다. wait() 함수는 호출 프로세스의 종료된 자식 프로세스 중 하나에 대한 상태 정보를 사용할 수 있게 될 때까지 또는 신호 catch 함수를 실행하거나 프로세스를 종료합니다. wait() 또는 waitpid() 동일한 프로세스의 종료를 기다리는 스레드가 두 개 이상 일시 중단된 경우 정확히 한 스레드는 대상 프로세스 종료 시 프로세스 상태를 반환해야 합니다. 대기() 호출 전에 상태 정보를 사용할 수 있는 경우 즉시 반환해야 합니다. stat_loc이 가리키는 정보가 WUNTRACED 플래그를 지정하고 WCONTINUED 플래그를 지정하지 않은 waitpid()에 대한 호출에 의해 저장된 경우, 정확히 매크로 중 하나인 WIFEXITED(*stat_loc), WIFSIGNALED(*stat_loc), WIFSTOPPED(*stat_loc) 0이 아닌 값으로 평가합니다.

그렇지 않으면 SIGCHLD가 차단된 경우, 자식 프로세스의 상태를 사용할 수 있기 때문에 wait() 또는 waitpid() 반환하는 경우 보류 중인 SIGCHLD 신호는 다른 자식 프로세스의 상태를 사용할 수 없는 경우 지워집니다. pid_t 대기 (int *stat_loc); pid_t 웨이트피드(pid_t pid, int *stat_loc, int 옵션); waitpid(): 성공시 상태가 변경된 자식의 프로세스 ID를 반환합니다. 오류가 발생하면 -1이 반환됩니다. WNOHANG이 지정되었고 pid에 의해 지정된 자식(ren)이 아직 상태를 변경하지 않은 경우 0이 반환됩니다. waitpid에 대한 pid 인수의 해석은 그 값에 따라 달라집니다 : waitpid() 함수에 대한 세 번째 이유는 프로세스의 독립적 인 섹션이 서로 간섭하지 않고 생성되고 자녀를 기다릴 수 있도록하기 위한 것입니다.