给定一个简单的 GenServer
过程。
defmodule KVServer do
use GenServer
def start do
GenServer.start(__MODULE__, %{}, name: :kv_server)
end
def store(k, v) do
GenServer.cast(:kv_server, {:store, k, v})
end
def handle_cast({:store, k, v}, state) do
{:noreply, Map.put(state, k, v)}
end
end
我可以使用
:sys.get_status/1
获取当前进程状态iex(1)> {:ok, pid} = KVServer.start
{:ok, #PID<0.119.0>}
iex(2)> KVServer.store(:a, 1)
:ok
iex(3)> KVServer.store(:b, 2)
:ok
iex(4)> {_,_,_,[_,_,_,_,[_,_,{_,[{_,state}]}]]} = :sys.get_status(pid)
...
iex(5)> state
%{a: 1, b: 2}
只是想知道 Elixir 是否提供了一种更简单的方法来获得
GenServer
进程的当前状态?
最佳答案
使用 :sys.get_state/1
:
iex(1)> {:ok, pid} = KVServer.start
{:ok, #PID<0.86.0>}
iex(2)> KVServer.store(:a, 1)
:ok
iex(3)> KVServer.store(:b, 2)
:ok
iex(4)> :sys.get_state(pid)
%{a: 1, b: 2}
关于elixir - Elixir 是否提供了一种更简单的方法来获取 GenServer 进程的当前状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39032156/