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() ->
gen_server:start_link

本文介绍了Erlang中sys模块的常用接口,包括通知进程状态改变、获取进程状态、挂起与唤醒进程、异步终止进程以及事件记录管理。通过示例展示了如何操作这些接口,例如编译启动进程、获取状态、开启事件日志、挂起进程并处理系统消息等。
最低0.47元/天 解锁文章
1374

被折叠的 条评论
为什么被折叠?



