0
나는대로 초기화되는 노동자는 다음과 같습니다글로벌 프로세스 이름에 대한 프로세스 ID를 검색 할 수 없습니다
defmodule GenServerDB.Worker do
use GenServer
def start_link(name) do
GenServer.start_link(__MODULE__, :ok, [name: {:global, {:name, name}}])
end
def init(:ok) do
{:ok, %{}}
end
end
그때 나는
:global
모듈을 사용하여 명명 될 것으로 예상 노동자 만들 수 있습니다
:
iex(3)> {:ok, pid} = Supervisor.start_link([Supervisor.Spec.worker(GenServerDB.Worker, [], [])], strategy: :simple_one_for_one)
{:ok, #PID<0.126.0>}
iex(4)> Supervisor.start_child(pid, [[1]])
Supervisor.start_child(pid, [[1]])
{:ok, #PID<0.128.0>}
iex(6)> Supervisor.start_child(pid, [[2]])
Supervisor.start_child(pid, [[2]])
{:ok, #PID<0.131.0>}
iex(7)> Supervisor.start_child(pid, [[3]])
Supervisor.start_child(pid, [[3]])
{:ok, #PID<0.133.0>}
iex(8)> Supervisor.which_children(pid)
Supervisor.which_children(pid)
[{:undefined, #PID<0.128.0>, :worker, [GenServerDB.Worker]},
{:undefined, #PID<0.131.0>, :worker, [GenServerDB.Worker]},
{:undefined, #PID<0.133.0>, :worker, [GenServerDB.Worker]}]
을
그러나 나는 시도하고 주어진 name
에 대한 pid
을 얻을 때, 나는 다음과 같은 얻을 :
iex(9)> :global.whereis_name({:global, {:name, 1}})
:global.whereis_name({:global, {:name, 1}})
:undefined
여기에 뭔가가 빠졌습니까? 내가 프로세스를 제대로 명명하지 않은 것 같습니다.
감사합니다 - 위의 설명에 대한 문서가있다? {{global, {: name, name}}'의 일부가 프로세스의 실제 이름 인 엘릭서 문서를 찾을 수 없습니다. – category
https://hexdocs.pm/elixir/GenServer.html#module-name-registration에 "{: global, ** term **} - GenServer가 전역으로 등록되었습니다. ** 주어진 용어로 ** the : 글로벌 모듈. " – Dogbert