erlang - servicio - Cómo se determina el PID del padre de un proceso
saber que procesos estan corriendo en windows (4)
Tengo un proceso en Erlang que se supone que debe hacer algo inmediatamente después de engendrar, y luego enviar el resultado al padre cuando haya terminado. ¿Cómo averiguo el PID del proceso que lo engendró?
Debe pasar self () al niño como uno de los argumentos a la función de entrada.
spawn_link(?MODULE, child, [self()]).
Puede usar el registro BIF para dar un nombre (un átomo) al proceso de generación / padre y luego volver a referir al nombre registrado de otros procesos.
FUNC () ->
%% Hacer algo
%% Entonces envía el mensaje al padre
padre! MENSAJE....
registrarse (parent, self ()),
spawn (MODULE, FUNC, [ARGS]).
Consulte Introducción a Erlang §3.3 y The Erlang Reference Manual §10.3 .
La respuesta de @Eridius es la mejor forma de hacerlo. Solicitar un proceso para registrar un nombre puede tener efectos colaterales involuntarios, como aumentar la visibilidad del proceso, sin mencionar la molestia de encontrar nombres únicos cuando tienes muchos procesos.
La mejor forma es pasarlo como un argumento a la función llamada para iniciar el proceso hijo. Si está generando diversión, que generalmente es una buena cosa que hacer, tenga cuidado de hacer:
spawn_link(fun () -> child(self()) end)
que NO hará lo que usted pensó. (Sugerencia: cuando se llama self ())
En general, debe evitar registrar un proceso, es decir, darle un nombre global, a menos que realmente desee que se conozca a nivel mundial. Engendrar una diversión significa que no tiene que exportar la función engendrada, ya que generalmente debe evitar la exportación de funciones que no están destinadas a ser llamadas desde otros módulos.