Frage

Ich habe einen Prozess in Erlang, der unmittelbar nach dem Spawnen etwas tun und das Ergebnis dann an das übergeordnete Element zurücksenden soll, wenn es fertig ist.Wie finde ich die PID des Prozesses heraus, der es erzeugt hat?

War es hilfreich?

Lösung

Sie sollten self() als eines der Argumente für die Eingabefunktion an das Kind übergeben.

spawn_link(?MODULE, child, [self()]).

Andere Tipps

Die Antwort von @Eridius ist die bevorzugte Vorgehensweise.Die Anforderung, dass ein Prozess einen Namen registrieren muss, kann unbeabsichtigte Nebenwirkungen haben, z. B. die Erhöhung der Sichtbarkeit des Prozesses, ganz zu schweigen von der Mühe, eindeutige Namen zu finden, wenn Sie viele Prozesse haben.

Der beste Weg besteht auf jeden Fall darin, es als Argument an die aufgerufene Funktion zu übergeben, um den untergeordneten Prozess zu starten.Wenn Sie Spaß machen, was im Allgemeinen eine gute Sache ist, achten Sie auf Folgendes:

spawn_link(fun () -> child(self()) end)

was NICHT so funktioniert, wie Sie es beabsichtigt haben.(Hinweis:wann wird self() aufgerufen)

Generell sollten Sie die Registrierung eines Prozesses vermeiden, d.h.Geben Sie ihm einen globalen Namen, es sei denn, Sie möchten wirklich, dass er weltweit bekannt ist.Spaß zu erzeugen bedeutet, dass Sie die erzeugte Funktion nicht exportieren müssen, da Sie im Allgemeinen vermeiden sollten, Funktionen zu exportieren, die nicht dazu gedacht sind, von anderen Modulen aufgerufen zu werden.

Sie können das BIF-Register verwenden, um dem erzeugenden/übergeordneten Prozess einen Namen (ein Atom) zu geben und dann auf den registrierten Namen anderer Prozesse zurückzugreifen.

FUNC() ->

%% Etwas tun
%% Senden Sie dann eine Nachricht an die Eltern
Eltern!NACHRICHT.

...

registrieren(parent, self()),
spawn(MODULE, FUNC, [ARGS]).

Sehen Erste Schritte mit Erlang §3.3 Und Das Erlang-Referenzhandbuch §10.3.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top