Después de ver la pantalla de Pragmatic Studio en Erlang, el último video sobre Supervisores mencionó que para que un supervisor reciba una notificación sobre uno de sus hijos para que pueda reiniciarlo correctamente, el el niño debe registrarse con process_flag(trap_exit, true)
. Tal vez simplemente interpreté mal al autor (y las posibilidades son MUY elevadas que malinterpreté), pero pensé que los supervisores saben automágicamente cuándo mueren sus hijos (probablemente a través de spawn_link o algo similar de fondo). ¿Es esto realmente necesario? ¿Cuándo se debe utilizar process_flag (trap_exit, true) en un caso en el mundo real debido a que la documentación indica explícitamente lo siguiente:Erlang y process_flag (trap_exit, true)
http://www.erlang.org/doc/man/erlang.html#process_flag-2
process_flag (trap_exit, Boolean)
Cuando se establece trap_exit a true, las señales de salida que llegan a un proceso se convierten a {'EXIT', From, Reason} mensajes, que pueden recibirse como mensajes ordinarios. Si trap_exit se establece en falso, el proceso finaliza si recibe una señal de salida distinta de la normal y la señal de salida se propaga a sus procesos vinculados. Los procesos de aplicación normalmente no deberían trampa exits.``
La necesidad de establecer el indicador trap_exit en una aplicación OTP es de hecho una situación excepcional. La mayoría de las aplicaciones OTP no necesitan establecer el indicador trap_exit explícitamente ya que los supervisores están diseñados para manejarlos correctamente de acuerdo con las especificaciones del niño. –