子进程规范

子进程规范是一个用于描述监督者管理的进程的元组. 对于大多数监督者而言, 子进程会随监督者的启动而启动, 并在监督者的生命周期结束时退出. 对于单个需要监督的进程, init/1函数给出的描述如下:

1
Server = {tr_server, {tr_server, start_link, []}, permanent, 2000, worker, [tr_server]}

子进程规范由6个元素组成: {ID, Start, Restart, Shutdown, Type, Module}.

  1. ID, 是一个用于在系统内部标志各规范的项式. 为了简单起见, 我们可以采用模块名.

  2. Start, 是一个用于启动进程的三元组{Module, Function, Arguments}. 与调用内置函数spawn/3时一样, 其中第一个元素是模块名, 第二个元素是函数名, 第三个元素是函数的调用参数列表.

  3. Restart, 用于指明子进程发生故障时是否需要重启. 取值可以为:

    • permanent: 无论处于任何原因导致进程终止都应该重启进程.

    • temporary: 永不重起进程.

    • transient: 仅在进程意外终止时重启进程.

  4. Shutdown, 用于指明如何终止进程, 取值可以为:

    • 整型: 表示终止进程时应采用软关闭策略, 给进程留出一段自我了断的时间(以毫秒为单位), 如果进程未能在指定时间内自行退出, 将被无条件终止.

    • brutal_kill: 表示在关闭监督进程时立即终止子进程.

    • infinity: 主要用于子进程本身也同为监督者的情况, 表示应给予子进程充分的时间自行退出.

  5. Type: 用于表示进程是监督者(supervisor)还是工作者(worker). 在整个监督树中, 除了实现了supervisor行为模式的监督者进程以外, 剩下的都是工作进程.

  6. Modules: 表示该进程所依赖的模块. 这部分信息只用于在代码热升级的时候告知系统该以何种顺序升级各个模块. 一般来说, 只需要列出子进程的主模块.