Como você determina o PID do pai de um Processo

votos
13

Eu tenho um processo em Erlang que é suposto fazer alguma coisa imediatamente após 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 o gerou?

Publicado 07/08/2008 em 02:54
fonte usuário
Em outras línguas...                            


4 respostas

votos
14

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

spawn_link(?MODULE, child, [self()]).
Respondeu 07/08/2008 em 03:27
fonte usuário

votos
4

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

Respondeu 16/09/2008 em 15:35
fonte usuário

votos
3

A melhor maneira é definitivamente para passá-lo como um argumento para a função chamada para iniciar o processo filho. Se você está gerando funs, que geralmente é uma boa coisa a fazer, ter o cuidado de fazer:

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

que não vai fazer como você pretende. (Dica: quando é auto () chamado)

Geralmente você deve evitar registrar um processo, ou seja, dando-lhe um nome global, a menos que você realmente quer que ele seja conhecido mundialmente. Desova um divertimento significa que você não tem que exportar a função gerou como geralmente você deve evitar funções que não são destinadas a ser chamado de outros módulos exportação.

Respondeu 11/08/2009 em 17:19
fonte usuário

votos
0

Você pode usar o registro de BIF para dar o processo de desova / pai um nome (um átomo), em seguida, remeter para o nome registado de outros processos.

FUNC () ->

%% Faça algo
%% Em seguida, enviar mensagem para o pai
pai! MENSAGEM.

...

register (progenitor, auto ()),
micélios (MÓDULO, FUNC, [ARGS]).

Veja Começando com Erlang §3.3 e A Erlang Referência §10.3 manual .

Respondeu 07/08/2008 em 04:57
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more