sys
模块提供了发送系统消息及调试信息的接口。
常用接口
-
change_code(Name, Module, OldVsn, Extra) -> ok | {error, Reason}
-
change_code(Name, Module, OldVsn, Extra, Timeout) -> ok | {error, Reason}
通知进程Name
改变状态,调用此接口之前需要通过sys:suspend/1-2
先挂起进程。change_code/4-5
被调用后,Module:system_code_change/4
会被调用,用于转化新状态。 -
get_state(Name) -> State
-
get_state(Name, Timeout) -> State
获取进程的状态。对于不同类型的进程,返回值State
有所不同:
对于gen_server
而言,State
为就是进程状态数据State
;
对于gen_statem
而言,State
为{StateName, Data}
;
对于gen_event
而言,State
为注册的事件处理器的信息列表[{HandleModule, HandlerId, HandlerState}]
-
get_status(Name) -> Status
-
get_status(Name, Timeout) -> Status
获取进程状态。 -
suspend(Name) -> ok
-
suspend(Name, Timeout) -> ok
挂起进程,当一个进程被挂起,便只能系统消息而不能响应其他消息。 -
resume(Name) -> ok
-
resume(Name, Timeout) -> ok
唤醒一个被挂起的进程。 -
terminate(Name, Reason) -> ok
-
terminate(Name, Reason, Timeout) -> ok
异步终止进程。 -
log(Name, Flag) -> ok | {ok, [system_event()]}
-
log(Name, Flag, Timeout) -> ok | {ok, [system_event()]}
Flag = true | {true, N :: integer() >= 1} | false | get | print
当Flag
为true
时,开启事件记录,此时可以指定最大记录数N;
当Flag
为false
时,关闭事件记录;
当Flag
为get
时,返回记录的事件列表;
当Flag
为print
时,在标准输出打印记录的事件列表。 -
log_to_file(Name, Flag) -> ok | {error, open_file}
-
log_to_file(Name, Flag, Timeout) -> ok | {error, open_file}
Flag = (FileName :: string()) | false
当Flag
为文件名
时,将事件写入文件Flag
中;
当Flag
为false
时,则取消写入。
例子
-module(test_sys).
-behaviour(gen_server).
-export([start/0]).
%% gen_server callbacks
-export([init/1, handle_call/3, handle_cast/2, handle_info/2, terminate/2, code_change/3]).
-export([call_test/0, cast_test/0]).
-record(state, {
}).
start() -