在escript中执行清理任务

时间:2014-12-22 17:02:47

标签: elixir

我正在Elixir中构建一个命令行实用程序并将其打包为escript。我需要在可执行文件退出时运行一些清理任务。

我对escript的理解是,每次从stdIn接收输入时它都会启动应用程序。我是否正确应用程序应在完成处理输入后退出?

我的应用程序确实链接了一个监控GenServer的主管,但是从我可以告诉它每次应用程序从stdIn接收新输入时重启。

根据Application Module Docs,您可以在Application模块中实现stop / 1回调。我这样做但回调永远不会发生。

如何在escript应用程序中执行清理任务?

1 个答案:

答案 0 :(得分:3)

OTP应用程序在启动escript时启动,并且只要脚本(OS进程)正在运行,就会运行,直到main函数返回为止。主要功能完成后,操作系统进程就会停止。

要明确清理应用程序,可以在main函数的末尾调用Application.stop/1。此调用是同步的,并在整个监督树终止后返回。请记住,默认关闭策略是等待最多5秒以使进程正常终止,因此如果您希望在某些进程中进行更长时间的清理,则需要重新访问主管中使用的子规范。