我有erlang应用程序:* .app文件和一些* .erl文件。我编译了所有这些。在终端我开始erl和那里application:start(my_application).
,一切都好,但如果我关闭终端应用程序也关闭。如何在没有终端的情况下运行应用程序?
谢谢。
答案 0 :(得分:10)
您可能希望使用-noshell
选项erl
。语法是
erl -noshell -s Module Function Arguments
所以在你的情况下,这可能是
erl -noshell -s application start my_application
这应该允许你(例如,如果你在Unix / Linux上)启动你的应用程序作为后台进程并让它继续运行。
一个有用的变体是调用stop/0
模块的init
函数,以便Erlang环境在完成函数运行后停止。如果你想运行一个简单的一次性函数并将输出传递给其他进程,这就派上用场了。
因此,例如,要管道more
你可以做
erl -noshell -s mymodule myfunction -s init stop | more
最后,您可能还可以使用escript
命令将Erlang代码作为脚本而不是编译代码运行,如果它对您的情况有意义的话。
希望有所帮助。
答案 1 :(得分:3)
处理这种情况的正确方法是构建一个包含您的应用程序并将系统作为所谓的嵌入式系统运行的版本。 这个版本将完全独立(它将包含erts和所有lib,如kernel,std,mnesia等)。 一开始,新进程将不会连接到shell进程。 它将是操作系统进程,因此您可以使用管道连接到它。所有脚本都包含在OTP中。 以下是一些信息:http://www.erlang.org/doc/design_principles/release_structure.html 它可能看起来很复杂,但像钢筋这样的工具可以为你做任何事情。