Tengo un proceso en erlang que se supone que debe hacer algo inmediatamente después del spawn, luego envío el resultado al padre cuando finaliza. ¿Cómo averiguo el PID del proceso que lo engendró?Cómo se determina el PID del elemento primario de un proceso
Respuesta
Debe pasar self() al hijo como uno de los argumentos de la función de entrada.
spawn_link(?MODULE, child, [self()]).
Puede utilizar el BIF regístrese para dar el proceso de desove/padre un nombre (un átomo) a continuación, se refieren de nuevo al nombre registrado de otros procesos.
FUNC() ->
%% Haga algo
%% A continuación, enviar el mensaje a los padres
padres! MENSAJE....
registro (padre, sí()),
desove (MÓDULO, FUNC, [ARGS]).
Ver Getting Started With Erlang §3.3 y The Erlang Reference Manual §10.3.
Si bien puede hacerlo registrando un nombre, no es en absoluto una buena idea. Esta publicación sería mejor si se desanima activamente por hacerlo y explica los problemas. – Christian
De vuelta en la versión beta privada (esta pregunta se remonta a aproximadamente una semana después del inicio de la versión beta privada), el aspecto de discusión del sitio no estaba muy bien formado. Realmente no quería expresar una opinión, simplemente establecer un enfoque alternativo. Creo que los pros y los contras se han abordado adecuadamente en las otras respuestas/publicaciones. –
La respuesta de @Eridius es la forma preferida 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 manera es definitivamente pasarlo como argumento a la función llamada para iniciar el proceso hijo. Si está de desove diversiones, que generalmente es una buena cosa que hacer, tener cuidado de hacer:
spawn_link(fun() -> child(self()) end)
la que no vamos a hacer como se pretendía. (Sugerencia: cuando se llama a self())
En general, debe evitar registrar un proceso, es decir, darle un nombre global, a menos que realmente desee que se conozca globalmente. 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.
- 1. ¿Cómo se determina el tamaño del proceso?
- 2. ¿Cómo determina Linux el próximo PID?
- 3. ptrace'ing del proceso primario
- 4. obtener pid del proceso hijo
- 5. ¿Cómo ver una cola de mensaje de proceso especificada si se conoce el PID del proceso?
- 6. Obteniendo el div primario del elemento
- 7. ¿Cómo obtener el PID de un proceso dando el nombre del proceso en Mac OS X?
- 8. Establecer el elemento primario de un formulario
- 9. ¿Cómo obtener el estado del proceso usando pid?
- 10. Java: Obtenga un proceso dado un pid
- 11. Cómo obtener el PID de un proceso en una tubería
- 12. Obtener nombre del proceso por PID
- 13. pid del proceso actualmente en ejecución
- 14. jQuery mueve el elemento DOM dentro del elemento primario
- 15. ¿Cómo desplazar un elemento dentro del elemento primario cuando pasa un elemento fijo?
- 16. ms C++ get pid del proceso actual
- 17. Determine pid de proceso terminado
- 18. Detectar cuando el proceso primario finaliza
- 19. ¿Cómo obtener el PID infantil en C?
- 20. Obtener el nombre del proceso de pid o manejar
- 21. Por qué la dirección de la variable de proceso hijo y el proceso primario es igual
- 22. Cómo matar un proceso en Java, dado un PID específico
- 23. ¿Cómo se determina el límite de la memoria del proceso en Linux?
- 24. Obtenga el estado del proceso por pid en Ruby
- 25. Cómo obtener el índice de un elemento primario en jQuery
- 26. ¿Cómo puedo encontrar el ID de proceso (pid) de un proceso iniciado en Java?
- 27. Conseguir última PID del proceso, en el Makefile
- 28. JQuery: Obtener el ID de elemento primario de un elemento se ha hecho clic
- 29. XML xpath, obtenga el elemento primario hasta un elemento específico
- 30. C# - Obtiene el elemento primario de ToolStripMenuItem
Para OTP y otros procesos que usan 'proc_lib', vea [¿Cómo encontrar al supervisor de un proceso OTP?] (Http://stackoverflow.com/questions/4132317/how-to-find-the-supervisor-of -an-otp-process) –