Ich habe einen Prozess in Erlang, der etwas unmittelbar nach dem Spawn tun soll, dann senden Sie das Ergebnis zurück zum Elternteil, wenn es fertig ist. Wie finde ich die PID des Prozesses heraus, der sie hervorgebracht hat?Wie bestimmen Sie die PID des Elternteils eines Prozesses
Antwort
Sie sollten self() an das Kind als eines der Argumente für die Eingabefunktion übergeben.
spawn_link(?MODULE, child, [self()]).
Sie können mit der BIF registrieren den Laich/Eltern-Prozess einen Namen zu geben (ein Atom), dann zurück an den registrierten Namen von anderen Prozessen beziehen.
FUNK() ->
%%
etwas tun %% Dann
Mutter Nachricht an Eltern schicken! BOTSCHAFT....
Register (parent, self()),
Spawn (MODULE, FUNC, [] args).
Siehe Getting Started With Erlang §3.3 und The Erlang Reference Manual §10.3.
Während Sie es tun könnten, indem Sie einen Namen registrieren, ist es überhaupt keine gute Idee. Dieser Beitrag wäre besser, wenn Sie sich aktiv dafür entmutigen und die Probleme erklären würden. – Christian
Zurück in der privaten Beta (diese Frage stammt etwa eine Woche nach Beginn der privaten Beta) war der Diskussionsaspekt der Website nicht besonders gut strukturiert. Ich wollte nicht wirklich eine Meinung äußern, sondern lediglich einen alternativen Ansatz angeben. Ich denke, die Vor- und Nachteile wurden in den anderen Antworten/Posts angemessen berücksichtigt. –
@Eridius 'Antwort ist der bevorzugte Weg, dies zu tun. Das Erzwingen eines Prozesses zur Registrierung eines Namens kann unbeabsichtigte Nebenwirkungen haben, wie zum Beispiel die Sichtbarkeit des Prozesses erhöhen, ganz zu schweigen von der Schwierigkeit, bei vielen Prozessen eindeutige Namen zu erstellen.
Der beste Weg ist definitiv, es als Argument an die aufgerufene Funktion übergeben, um den Kindprozess zu starten. Wenn Sie Spaße laichen, die in der Regel eine gute Sache zu tun ist, seien Sie vorsichtig zu tun:
spawn_link(fun() -> child(self()) end)
, die, wie Sie beabsichtigten geht nicht. (Hinweis: when ist self() angerufen)
Im Allgemeinen sollten Sie vermeiden, einen Prozess zu registrieren, d. H. Einen globalen Namen zu vergeben, es sei denn, Sie möchten wirklich, dass er global bekannt ist. Das Erzeugen eines Spaßes bedeutet, dass Sie die erstellte Funktion nicht exportieren müssen, da Sie im Allgemeinen den Export von Funktionen vermeiden sollten, die nicht von anderen Modulen aufgerufen werden sollen.
- 1. Ermitteln PID des beendeten Prozesses
- 2. Wie extrahiert man die PID eines Prozesses über die Befehlszeile
- 3. linux: programmatisch übergeordnete pid eines anderen Prozesses?
- 4. PID des Prozesses in Shell-Skript erhalten
- 5. Windows Batch-Datei: PID des letzten Prozesses?
- 6. ms C++ pid des aktuellen Prozesses
- 7. Wie bekomme ich die PID des Hintergrundprozesses?
- 8. Wie erfassen Sie die PID eines Prozesses beim Start von der Kommandozeile?
- 9. Track-PID des gerade in Powershell gestarteten Prozesses
- 10. Holen Sie sich die PID eines Prozesses gestartet mit nohup über ssh
- 11. Wie misst man die Stapelgröße eines Prozesses?
- 12. Wie die Fertigstellung des Prozesses
- 13. Profiling eines Prozesses über seine PID Linux Kernel Programmierung
- 14. Wie pid eines Linux-Daemon von init.d
- 15. Wie erhält man die PID eines Prozesses, indem man den Prozessnamen in Mac OS X angibt?
- 16. Bestimmen des Typs eines Ausdrucks
- 17. Wie ermitteln Sie die PID eines Prozesses, der durch die Instanziierung einer COM-Co-Klasse gestartet wurde?
- 18. Holen Sie das aktuelle Arbeitsverzeichnis des Prozesses mit einer PID programmgesteuert auf OS X
- 19. Bestimmen Sie die Größe eines InputStream
- 20. Wie erhält man die PID des aktuell debuggten Prozesses in gdb?
- 21. Messzeit des Prozesses und seiner Kinder
- 22. Speichernutzung eines untergeordneten Prozesses?
- 23. Speicherauszug eines Prozesses
- 24. Erhalten Sie eine PID-Nummer eines Prozesses und dann kill es mit Python
- 25. Wie erhalte ich die PID eines Knotennamens?
- 26. XSLT - So teilen Sie die Kinder eines Elternteils auf
- 27. Überprüfen des Status eines Produktions-ASP.NET-Prozesses
- 28. Wie die Größe des Knopfabschnittes eines Windows-Optionsfeld, um bestimmen
- 29. Gegeben ein Kind PID, wie können Sie die Eltern PID
- 30. Größe des lesbaren Speichers eines Prozesses ermitteln?
Für OTP und andere Prozesse, die 'proc_lib' verwenden, siehe [Wie finde ich den Supervisor eines OTP-Prozesses?] (Http://stackoverflow.com/questions/4132317/how-to-find-the-supervisor-of -an-otp-process) –