Первое: вы всегда должны использовать одно и то же имя для адресации процесса, "foo"
и foo
различны, поэтому начните с строгого соглашения об именах.
Второе: при использовании глобально зарегистрированных процессов вам также необходимо использовать {global, Name}
для адресации процессов.
По моему мнению, вам также следует преобразовать функцию stop
в gen_server:call
, которая заблокирует и позволит вам вернуть значение из gen_server. Пример:
stop(Name) ->
gen_server:call({global, Name}, stop).
handle_call(stop, _From, State) ->
{stop, normal, shutdown_ok, State}
Это вернет shutdown_ok
вызывающей стороне.
С учетом вышесказанного модуль global
довольно ограничен, а альтернативы, такие как gproc
, обеспечивают гораздо лучшее распространение.