2011-01-12 4 views
2

나는 simple_one_for_one 전략을 가진 감독자 하나와 거기에 동적으로 추가 된 많은 작업자 자식이있는 테스트 응용 프로그램을 만들고 있습니다. 자식이 정상적으로 종료 할 때 호출 될 관리자에서 콜백을 구현하는 방법 (또는 메시지를받는 방법)?자식 정상 종료를위한 관리자 콜백

주요 목표는 다른 프로세스에 모든 감시 대상 작업자 프로세스가 완료되었음을 알리고 최종 보고서를 보여줄 시간입니다.

그런 종류의 동작을 어떻게 디자인합니까? 감독자와 gen_server를 결합한 자체 동작을 만들어야합니까, 아니면 표준 otp 동작으로이 작업을 수행 할 수있는 방법이 있습니까?

답변

1

두 가지 방법으로 알림을 전송할 수 있습니다. 첫 번째는 단순히 처음부터 아이를 모니터링하는 것입니다. erlang : monitor/2를 사용하면 제 3자가 프로세스가 있는지 여부를 알 수 있습니다. 모니터링되는 프로세스가 종료되면 결과는 모니터링 프로세스에 대한 이유를 알려주는 메시지로 바뀝니다.

다른 방법은 프로세스 'terminate/2 기능 (gen_fsm 인 경우 종료/3)에서 약간의 메시지 전송을 사용할 수 있습니다. 종료 함수는 모든 상황에서 호출되지 않기 때문에 훨씬 더 부서지기 쉽습니다.

모니터 옵션이 훨씬 우수합니다.

+1

모니터가 좋은 점입니다. 그러나 궁금한 점이 있다면 감독관이 추락 한 다음 재시작하는 경우 작업자 프로세스를 "재 점검"하는 방법이 궁금합니다. 재시작 후 작업자가 새로운 Pid를 가지고 있고, 새로운 Pid에 프로세스를 모니터링 할 수있는 방법이 필요합니다. – Aler

+0

2 가지 방법. 이름 레지스트리 (예 : 글로벌 또는 gproc 또는 사용자 자신의 롤)를 사용하고 각 프로세스를 등록하거나 일시 중지시키고 재시작을 처리해야하는 타사가 있어야 PID에 액세스하여 모니터를 설정할 수 있습니다. –