주어진 프로세스 P의 프로세스 상태를 하위 P '중 하나에서 얻으려고합니다.리눅스에서 부모 프로세스 상태 가져 오기
나는 함수 waitpid()에 대해 알고 있지만, 문서에서는 자식 프로세스의 상태를 확인하는 데 사용된다고 말했다.
다른 방법이 있습니까?
주어진 프로세스 P의 프로세스 상태를 하위 P '중 하나에서 얻으려고합니다.리눅스에서 부모 프로세스 상태 가져 오기
나는 함수 waitpid()에 대해 알고 있지만, 문서에서는 자식 프로세스의 상태를 확인하는 데 사용된다고 말했다.
다른 방법이 있습니까?
프로세스가 상위 프로세스가 종료되거나 상위 프로세스의 종료 상태를 기다릴 수있는 표준 기능은 없습니다. 프로세스 트리는 그렇게 작동하지 않습니다. - 아이들은 부모가 출구 할 때 부모에게 통보합니다.
따라서 자녀 과정에서 부모의 사망 사실을 알기를 원할 경우 부모가 적극적으로 부모에게 알리도록 주선해야합니다. 이것은 신호를 보내는 일처럼 보입니다. 학부모가 깔끔하게 퇴장했다는 (즉, main()
에서 돌아 오거나 exit()
으로 전화하면) 그 사실을 알리는 것만으로 충분할 것입니다. 신호를 선택하십시오 - 아마도 SIGUSR1
또는 SIGUSR2
- 부모 기록부에 해당 신호를 아이들에게 보내는 atexit()
처리기가 있습니다. 부모님께서는 자녀를 계속 추적해야 할 수도 있고하지 않을 수도 있습니다.
부모님의 퇴장 상태에 관해 언급 한대로, 조금 더 원할 것입니다. 두 가지 (또는 그 이상의) 신호 중 어느 신호를 보낼 지 선택하여 어린이에게 대단위 정보를 얻을 수 있지만 IPC 메커니즘이 필요한 자세한 정보를 보려면 공유 메모리 또는 파이프 (또는 그 중 일부)에 종료 상태를 기록하거나, 소켓 또는 메시지 대기열로 메시지를 보내거나, 일반 파일에 상태를 쓰거나, 생각하지 않은 다른 것을 종료 상태로 작성할 수 있습니다.
또한 기존 모델이 매우 잘 작동하고 40 년 동안 완료되었음을 고려해야합니다. 실제로 여러분의 요구를 충족시킬 수는 없겠지만, 유닉스 모델에 더 잘 들어 맞도록 디자인을 개선 할 수 있을지 생각해보십시오.
Thanks, clear and clean answer (y) – Mouley
'atexit()'에 등록 된 함수는 프로그램이 빠른 종료 함수 중 하나를 호출하지 않고 제어를 멈추는 경우에만 호출된다는 점에 유의하십시오. –
좋은 관찰 인 @JonathanLeffler, 어느 정도는 양탄자 밑으로 밀었습니다. 나는 부모 프로세스가'exit()'를 호출하거나'main()'에서 리턴함으로써 종료한다고 가정 한 접근법을 규정했다. 그것이 다른 방법으로 종료된다면, 어린이들이 그것에 대해 듣기 전에 명시 적으로 아동 통지 기계를 작동시킬 필요가있다. 그것은 모든 경우에 일어나기에 의지 할 수는 없습니다. 특히, 'SIGKILL'을받은 결과로 부모가 사망하면 그것은 일어나지 않을 것입니다. –
@Someprogrammerdude, 지정된 pid가 호출 프로세스의 자식이 아닌 프로세스를 식별하면'waitpid()'는'ECHILD'로 실패하는 것으로 문서화됩니다. 나는 OP의 구현이 버그면에서 버그가 있다는 것을 알았지 만, 그렇다면 분명히 그런 버그에 의존하는 것을 권장하지 않을 것이다. –
아이의 부모 프로세스가 죽으면, 고아가 된 아이는'init'으로 이동합니다. 이것은 부모가 더 이상 존재하지 않는 아이를 탐지하는 데 사용될 수 있습니다. 현재이 시점에서 이전 상위 프로세스에 대한 정보는 오래 전에 사라졌습니다. – tofro