Erlang и process_flag (trap_exit, true)

После просмотра снимков экрана Pragmatic Studio на Erlang в последнем видео о супервизорах упоминалось, что для того, чтобы супервизор получил уведомление об один из его дочерних элементов, чтобы он мог его правильно перезапустить, дочерний элемент должен зарегистрироваться с process_flag (trap_exit, true) . Возможно, я просто неправильно понял автора (и очень высоки шансы, что я неправильно понял), но я думал, что супервизоры автоматически узнают, когда их дети умирают (возможно, через spawn_link или что-то подобное в фоновом режиме). Это действительно необходимо? Когда следует использовать process_flag (trap_exit, true) в реальном мире, потому что в документации явно указано следующее:

http://www.erlang.org/doc/man/erlang.html#process_flag-2

process_flag (trap_exit, Boolean)

Когда trap_exit имеет значение true, сигналы выхода, поступающие в процесс, преобразуются в сообщения {'EXIT', From, Reason}, которые могут быть получены как обычные сообщения. Если trap_exit имеет значение false, процесс завершается, если он получает сигнал выхода, отличный от нормального, и сигнал выхода распространяется на связанные процессы. Обычно процессы приложений не должны перехватывать выходы. "

17
задан filmor 23 April 2013 в 15:25
поделиться