目前用過的很多 start 函式,如 Supervisor.start_link
, GenServer.start
等都可以使用 name option 來把 process 註冊在一個 atom 下,這個 name option 裡面使用了 Process.register/2
register(pid_or_port, name)
函式會將一個 pid 或是 port 註冊綁定在目前這個 node 的一個名字下。
當綁定之後,就可以用該名字來替代 pid 去做 send
之類的 process 呼叫。
Process.register/2
有幾個條件
nil
, false
, true
, :undefined
使用範例,註冊當下的 iex pid
iex(5)> Process.register(self(), :hi)
true
iex(6)> send(:hi, "可以送訊息")
"可以送訊息"
iex(7)> send(:boom, "沒註冊的 atom 不能")
** (ArgumentError) errors were found at the given arguments:
* 1st argument: invalid destination
:erlang.send(:boom, "沒註冊的 atom 不能")
iex:7: (file)