Blog

2 August 2019

waitpid 예제

일부 시스템에서는 반환 값이 -1이면 자식 프로세스가 자동으로 수확될 수 있습니다. 자세한 내용 및 기타 예제는 perlipc를 참조하십시오. 시스템에서 생성된 모든 SIGCHLD 신호의 신뢰할 수 있는 대기열이 이러한 보증을 할 수 있다고 가정할 수 있지만, 반대 예는 SIGCHLD를 차단하고 포크()/wait() 작업의 무기한 루프를 수행하는 프로세스의 경우입니다. 구현이 큐에 대기된 신호를 지원하는 경우 결국 시스템은 큐에 대한 메모리가 부족해집니다. 대기열 의 깊이에 약간의 제한이 있어야하기 때문에 보증을 할 수 없습니다. waitpid() 함수의 세 번째 이유는 프로세스의 독립적인 섹션이 서로 간섭하지 않고 생성되고 자식이 대기하도록 허용하는 것입니다. 예를 들어, 다음 문제는 휴대용 셸 또는 명령 인터프리터를 개발할 때 발생합니다: c 언어의 구문: pid_t waitpid(child_pid, status, 옵션); $ ./a.out & 아동 PID는 32360 [1] 32359 $ 킬 -STOP 32360 신호에 의해 중지 -STOP 32360 신호에 의해 중지 -CONT 32360 계속 $ 킬 15 [1]++ 완료 ./a.out $ 상태는 NULL, 대기 () 및 waitpid() 지점에 있는 저장 정보입니다. 이 정수는 다음 매크로로 검사 할 수 있습니다 (이는 인수로 정수 자체를, 그것에 대한 포인터가 아닌, wait() 및 waitpid (!)에서 수행되는 것처럼: 우리는 아이가 여전히 실행되는 동안 뭔가를하고 싶은 경우 하지만 아이가 finis가있을 때 그것을 중지 Hed? 어떤 프로세스에 자식 프로세스가 없는 경우 wait() 즉시 “-1″을 반환합니다. . . _POSIX_REALTIME_SIGNALS가 정의되고 구현이 SIGCHLD 신호를 큐에 대기하는 경우, 자식 프로세스의 상태를 사용할 수 있기 때문에 wait() 또는 waitpid()가 반환되는 경우 자식 프로세스의 프로세스 ID와 연결된 보류 중인 SIGCHLD 신호는 삭제.

보류 중인 다른 SIGCHLD 신호는 보류 중입니다. wait() 호출은 자식 프로세스 중 하나가 종료되거나 신호가 수신될 때까지 호출 프로세스를 차단합니다. 자식 프로세스가 종료된 후 부모는 대기 시스템 호출 명령 후 실행을 계속합니다. #include #include #include #include 대기 중인 SIGCHLD 신호와 연결된 보류 중인 SIGCHLD 신호를 수락(폐기)하지 않는 구현 성공적으로 기다렸다 – 자식, 다음과 같은 이유로 위에서 설명한 보증을 할 수 없습니다 : 상태에 대한 정보를 찾기 위해, 우리는 WIF를 사용합니다….매크로 옵션 인수는 다음 플래그의 0 또는 0의 비트 로 포함 또는 에서 생성됩니다, 헤더에 정의됨: cpid = 포크(); (cpid == -1) { perror(“포크”); 출구(EXIT_FAILURE); } 다음 프로그램은 포크(2) 및 waitpid(2)의 사용을 보여 준다. 프로그램은 자식 프로세스를 만듭니다. 프로그램에 명령줄 인수가 제공되지 않으면 자식은 일시 중지(2)를 사용하여 실행을 일시 중지하여 사용자가 자식에게 신호를 보낼 수 있도록 합니다.

Bize Ulaşın