保持进程存活

一些进程可能对系统来说是非常重要的。例如,在一个常规的分时系统里,常常每一个终端连接都由一个负责输入输出的进程来服务。如果这个进程终止了,终端也就不可用了。程序8.2通过重启终止的进程来保持进程存活。

这个注册为keep_alive的服务程序保有一个由{Id,Mod,Func,Args}模式元组构成的列表,这个列表包含了所有正在运行的进程的标识符、模块、函数和参数。 它使用BIF spawn_link/3启动这些进程,因此它也和每一个进程建立连接。然后这个服务程序就开始捕获EXIT信号,当一个进程终止了,它就会收到一个EXIT信号。在搜索了那个由元组构成的列表之后,它就能重启这个进程。

不过程序8.2当然也需要改进。如果从进程列表里移除一个进程是不可能的话,那么当我们试图用一个并不存在的module:function/arity来创建进程,程序就会进入死循环。建立一个没有这些缺陷的程序,就作为练习留给读者来完成。