在不依赖终端的情况下运行erlang应用程序

在不依赖终端的情况下运行erlang应用程序,erlang,terminal,Erlang,Terminal,我有erlang应用程序:*.app文件和一些*.erl文件。我把它们都编译了。在终端中,我启动erl,在那里应用程序:启动(我的应用程序)。,一切正常,但如果我关闭终端应用程序,也会关闭。如何在没有终端的情况下运行应用程序 谢谢。您可能想使用-noshell选项来erl。语法是 erl -noshell -s Module Function Arguments 所以在你的情况下,这可能是 erl -noshell -s application start my_application 这应

我有erlang应用程序:*.app文件和一些*.erl文件。我把它们都编译了。在终端中,我启动erl,在那里
应用程序:启动(我的应用程序)。
,一切正常,但如果我关闭终端应用程序,也会关闭。如何在没有终端的情况下运行应用程序


谢谢。

您可能想使用
-noshell
选项来
erl
。语法是

erl -noshell -s Module Function Arguments
所以在你的情况下,这可能是

erl -noshell -s application start my_application
这应该允许您(例如,如果您在Unix/Linux上)将应用程序作为后台进程启动并保持其运行

一个有用的变体是调用
init
模块的
stop/0
函数,以便Erlang环境在完成函数运行后停止。如果您想要运行一个简单的一次性函数并通过管道将输出传输到其他进程,那么这就很方便了

因此,例如,要通过管道输送到
更多
,您可以这样做

erl -noshell -s mymodule myfunction -s init stop | more
最后,您还可以使用
escript
命令将Erlang代码作为脚本而不是编译代码运行,如果这对您的情况有意义的话


希望这能有所帮助。

处理这种情况的正确方法是构建一个包含应用程序的版本,并运行所谓的嵌入式系统。 这个版本将是完全独立的(它将包含ERT和所有LIB,如内核、std、mnesia等)。 启动时,新进程将不会连接到shell进程。 它将是一个操作系统进程,因此您可以使用管道连接到它。所有脚本都包含在OTP中。 以下是一些信息: 这看起来可能很复杂,但像钢筋这样的工具可以为您做一切