2017-01-07 2 views
4

Neu bei Elixir und OTP. Probieren Sie einige Hallo-Welt-Beispiele mit GenServer. Ich schreibe Tests, bei denen jeder Test einen GenServer-Prozess hervorbringt. Sie sind nicht explizit beendet. Wird der Prozess nach dem Test sterben?Stirbt ein Elixir-Prozess, wenn es keine Referenzen mehr auf seine PID gibt?

Follow-up: Wenn es nicht beendet wird, verwandeln sie sich in "Zombie" Prozess? Gibt es auch ein Muster, um sie nach Abschluss des Tests zu beenden?

Antwort

4

Nein, Prozesse sind kein Müll gesammelt. Ja, sie werden zu "Zombie" Prozessen.

Das Muster, das zu verhindern, ist, die Prozesse zu verbinden. Wenn ein verknüpfter Prozess beendet wird, werden auch alle verknüpften Prozesse beendet. Wenn Sie also Ihren Server mit GenServer.start_link aus dem Testprozess starten, wird der Serverprozess mit dem Testprozess verknüpft und wenn der Test existiert, wird der Server ebenfalls beendet.

Verwandte Themen