如果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.
 

最新文章

  1. Spark作业调度阶段分析
  2. UIViewController相关知识
  3. ios CGRect
  4. 查看mysql,apache,php,nginx编译参数
  5. zmqsend for FFmpeg
  6. SQL Server中的事务日志管理(3/9):事务日志,备份与恢复
  7. OpenCV实现KNN算法
  8. 使用go tool pprof分析内存泄漏、CPU消耗
  9. Spark官方文档——独立集群模式(Standalone Mode)
  10. Chromium网页Frame Tree创建过程分析
  11. Python练习_更改配置文件(3)
  12. naive bayes
  13. emacs打开乱码解决办法
  14. 12. Integer to Roman (JAVA)
  15. JavaServer Faces (JSF) with Spring
  16. operator new和operator delete
  17. String、StringBuffer、StringBuilder区别
  18. deconvolution layer parameter setting
  19. 155. Min Stack - Unsolved
  20. 20155216 Exp4 恶意代码分析

热门文章

  1. 发生了Post错误:错误代码40005,微信返回错误信息:invalid file type
  2. MVC-04 视图(1)
  3. golang ODBC 访问access数据库(问题解决之心理路程)
  4. HDU 1090 A+B for Input-Output Practice (II)
  5. HDU 2067 小兔的棋盘
  6. 如何在自己的Activity中去控制EditText的焦点
  7. 大数据时代之hadoop(五):hadoop 分布式计算框架(MapReduce)
  8. 【JAVA】修改项目包名
  9. JavaScriptCore.framework基本用法(一)
  10. HTML5 按字母顺序排列的标签列表 new : HTML5 中的新标签。