문제

생성 직후에 작업을 수행하고 완료되면 결과를 부모에게 다시 보내는 프로세스가 erlang에 있습니다.이를 생성한 프로세스의 PID를 어떻게 알아낼 수 있나요?

도움이 되었습니까?

해결책

self()를 항목 함수에 대한 인수 중 하나로 자식에게 전달해야 합니다.

spawn_link(?MODULE, child, [self()]).

다른 팁

@Eridius의 답변이 선호되는 방법입니다.이름 등록을 위한 프로세스를 요구하는 것은 프로세스가 많을 때 고유한 이름을 생각해 내야 하는 번거로움은 물론 프로세스의 가시성을 높이는 등 의도하지 않은 부작용을 초래할 수 있습니다.

가장 좋은 방법은 자식 프로세스를 시작하기 위해 호출되는 함수에 인수로 전달하는 것입니다.일반적으로 좋은 일인 재미있는 일을 생성하는 경우 다음을 주의하세요.

spawn_link(fun () -> child(self()) end)

의도한 대로 작동하지 않습니다.(힌트:self()는 언제 호출되나요?

일반적으로 프로세스 등록을 피해야 합니다.실제로 전역적으로 알려지기를 원하지 않는 한 전역 이름을 지정합니다.fun을 생성한다는 것은 일반적으로 다른 모듈에서 호출할 의도가 없는 함수를 내보내는 것을 피해야 하기 때문에 생성된 함수를 내보낼 필요가 없다는 것을 의미합니다.

BIF 레지스터를 사용하여 생성/부모 프로세스에 이름(원자)을 지정한 다음 다른 프로세스에서 등록된 이름을 다시 참조할 수 있습니다.

기능() ->

%% 뭔가를 해보세요
%% 그런 다음 부모에게 메시지를 보냅니다.
부모의 !메시지.

...

레지스터(부모, 자기()),
생성(MODULE, FUNC, [ARGS]).

보다 Erlang §3.3 시작하기 그리고 Erlang 참조 매뉴얼 §10.3.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top