Pergunta

Eu tenho um processo em erlang, que é suposto para fazer algo imediatamente após a desova, em seguida, enviar o resultado de volta para o pai quando ele for concluído.Como faço para descobrir o PID do processo que gerou isso?

Foi útil?

Solução

Você deve passar self() para a criança como um dos argumentos para a função de entrada.

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

Outras dicas

@Eridius' resposta é a melhor maneira de o fazer.Exigindo um processo para registrar um nome pode ter indesejados efeitos colaterais, tais como aumentar a visibilidade do processo para não mencionar o incômodo de vir com nomes exclusivos quando você tiver lotes de processos.

A melhor maneira é, definitivamente, para passá-lo como argumento para a função chamada para iniciar o processo filho.Se você está gerando divertimentos, que geralmente é uma Coisa Boa para fazer, tenha cuidado de fazer:

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

que NÃO vai fazer como você pretende.(Dica:quando é auto() chamado)

Em geral, você deve evitar o registo de um processo, isto é,dando-lhe um nome global, a menos que você realmente quer ser mundialmente conhecida.A geração de um divertido significa que você não precisa de exportação gerado função de como você geralmente deve evitar a exportação de funções que não são destinadas a ser chamado a partir de outros módulos.

Você pode usar o BIF registar-se para dar a postura / processo principal de um nome (um átomo), em seguida, consulte novamente o nome registrado a partir de outros processos.

FUNC() ->

%% Fazer algo
% % , Em seguida, enviar mensagem para os pais
- mãe !MENSAGEM.

...

registar(pai, mãe, self()),
spawn(MÓDULO, FUNC, [ARGS]).

Ver Introdução Com Erlang §3.3 e O Erlang Manual De Referência §10.3.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top