Как вы определяете PID в Родитель Процесса

голоса
13

У меня есть процесс в Erlang, который должен сделать что-то сразу после икры, а затем отправить результат обратно к родителю, когда она будет закончена. Как выяснить PID процесса, породившего его?

Задан 07/08/2008 в 02:54
источник пользователем
На других языках...                            


4 ответов

голоса
14

Вы должны пройти самостоятельно () для ребенка в качестве одного из аргументов в функции ввода.

spawn_link(?MODULE, child, [self()]).
Ответил 07/08/2008 в 03:27
источник пользователем

голоса
4

Ответ @Eridius' является предпочтительным способом сделать это. Требуя процесс зарегистрировать имя может иметь непредсказуемые побочные эффекты, такие как увеличение видимости процесса, не говоря уже о хлопоты подходя с уникальными именами, когда у вас есть много процессов.

Ответил 16/09/2008 в 15:35
источник пользователем

голоса
3

Лучший способ, безусловно, передать его в качестве аргумента функции, вызываемой для запуска дочернего процесса. Если вы нерест потех, что в целом это хорошая вещь, чтобы сделать, будьте осторожны делать:

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

который не будет делать, как вы хотели. (Подсказка: когда сам () называется)

Как правило, вы должны избегать регистрации процесса, т.е. придав ему глобальное имя, если вы действительно не хотите, чтобы это было во всем мире известно. Нерест весело означает, что вы не должны экспортировать порождала функцию следует вообще избегать экспорта функций, которые не предназначены для вызова из других модулей.

Ответил 11/08/2009 в 17:19
источник пользователем

голоса
0

Вы можете использовать регистр BIF, чтобы дать нерестового / родительский процесс имя (атом), а затем вернуться к зарегистрированному имени других процессов.

FUNC () ->

%% ли что - то
%% Затем отправить сообщение в родительские
родитель! СООБЩЕНИЕ.

...

Регистр (родитель, самостоятельно ()),
икра (МОДУЛЬ, FUNC, [АРГС]).

См Начало работы с Erlang §3.3 и The Erlang Reference Manual §10.3 .

Ответил 07/08/2008 в 04:57
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more