Die Erlang Dokumentation wird die folgende über gen_servers:Was ist die Semantik für die Auswahl des Grundes beim Beenden eines gen_servers?
...
Beachten Sie, dass aus irgendeinem anderen Grund als normal, Herunterfahren oder {shutdown, Term} die gen_server aufgrund eines beenden, wird angenommen, Fehler und ein Fehlerbericht wird mit error_logger: format/2 ausgegeben.
Quelle: http://www.erlang.org/doc/man/gen_server.html#Module:terminate-2
Seit etwas anderes als diese drei Gründe als Fehler angesehen werden, schließe ich, dass die Gründe normal
, shutdown
und {shutdown, Reason}
sind normale Verhalten betrachtet.
Ich stelle mir vor, die Entwickler hatten ein Motiv, wenn sie diese drei Gründe wählen, einen gen_server unter normalen Bedingungen zu stoppen, aber ich bin nicht ganz sicher, wie man bestimmt, welchen zu verwenden.
Also wann sollte ich normal
, shutdown
und {shutdown, Reason}
verwenden?
Danke! Ich schätze, ich habe das Lesen über Supervisors übersprungen: P – pedromanoel
Der Grund, dass Supervisors 'shutdown' verwenden, ist, dass es tatsächlich ein Fehlerwert ist. Wenn also ein Kind keine Ausgänge schließt, wird es getötet. Wenn es Trapping gibt, wird erwartet, dass es speziell ein "Shutdown" -Ereignissignal von seinem Eltern (Supervisor) behandelt und sauber beendet. Dies wird durch OTP-Verhalten gehandhabt, so dass es nicht notwendig ist, dies selbst zu tun. – rvirding