如何设置gen_server在退出时执行相关操作
2024-08-26 23:53:01
如果gen_server在监控树中不需要stop函数,gen_server会由其supervisor根据shutdown策略自动终止掉.如果要在进程终止之前执行清理,shutdown策略必须设定一个timeout值而不是brutal_kill并且gen_server要在init设置trap_exit.当被supervisor命令shutdown的时候,gen_server会调用terminnate(shutdown,State),特别注意: 被supervisor终止掉,终止的原因是Reason=shutdown,这个我们之前也
init(Args) ->
...,
process_flag(trap_exit, true),
...,
{ok, State}.
...
terminate(shutdown, State) ->
..code forcleaning up here..
ok.
如果gen_server不是supervisor的一部分,stop方法就很有用了:
...
export([stop/0]).
...
stop() ->
gen_server:cast(ch3, stop).
...
handle_cast(stop, State) ->
{stop, normal, State};
handle_cast({free, Ch}, State) ->
....
...
terminate(normal, State) ->
ok.
通过调用terminate方法,gen_server可以优雅的关闭掉了. 如果结束的消息不是normal,shutdowngen_server就会被认为是异常终止并通过error_logger:format/2产生错误报告.
Note: if any reason other than normal, shutdown or {shutdown, Term} is used whenterminate/2 is called, the OTP framework will see this as a failure and start logging a bunch of stuff here and there for you.
最新文章
- Spark作业调度阶段分析
- UIViewController相关知识
- ios CGRect
- 查看mysql,apache,php,nginx编译参数
- zmqsend for FFmpeg
- SQL Server中的事务日志管理(3/9):事务日志,备份与恢复
- OpenCV实现KNN算法
- 使用go tool pprof分析内存泄漏、CPU消耗
- Spark官方文档——独立集群模式(Standalone Mode)
- Chromium网页Frame Tree创建过程分析
- Python练习_更改配置文件(3)
- naive bayes
- emacs打开乱码解决办法
- 12. Integer to Roman (JAVA)
- JavaServer Faces (JSF) with Spring
- operator new和operator delete
- String、StringBuffer、StringBuilder区别
- deconvolution layer parameter setting
- 155. Min Stack - Unsolved
- 20155216 Exp4 恶意代码分析
热门文章
- 发生了Post错误:错误代码40005,微信返回错误信息:invalid file type
- MVC-04 视图(1)
- golang ODBC 访问access数据库(问题解决之心理路程)
- HDU 1090 A+B for Input-Output Practice (II)
- HDU 2067 小兔的棋盘
- 如何在自己的Activity中去控制EditText的焦点
- 大数据时代之hadoop(五):hadoop 分布式计算框架(MapReduce)
- 【JAVA】修改项目包名
- JavaScriptCore.framework基本用法(一)
- HTML5 按字母顺序排列的标签列表 new : HTML5 中的新标签。