Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何构建执行后不会停止Erlang VM的Elixir脚本(如Elixir--no-halt)_Erlang_Elixir_Erlang Escript - Fatal编程技术网

如何构建执行后不会停止Erlang VM的Elixir脚本(如Elixir--no-halt)

如何构建执行后不会停止Erlang VM的Elixir脚本(如Elixir--no-halt),erlang,elixir,erlang-escript,Erlang,Elixir,Erlang Escript,我有一个程序,启动应用程序,然后向主管添加(儿童)工人。显然,在仅仅这样做之后,它就没有更多的事情要做了,它停止(退出)。因此,让它不停止虚拟机将允许工人工作 我提出的唯一解决方案是添加: IO.gets "Working... To finish hit <Enter>." 或 有没有办法用escript做到这一点 或者我应该使用不同的解决方案来打包和分发我的程序,实际上它更像是一个服务器/守护进程,而不是一个命令行工具?打包此类系统的典型方法是OTP版本。你可以用它 如果出于某

我有一个程序,启动应用程序,然后向主管添加(儿童)工人。显然,在仅仅这样做之后,它就没有更多的事情要做了,它停止(退出)。因此,让它不停止虚拟机将允许工人工作

我提出的唯一解决方案是添加:

IO.gets "Working... To finish hit <Enter>."

有没有办法用escript做到这一点


或者我应该使用不同的解决方案来打包和分发我的程序,实际上它更像是一个服务器/守护进程,而不是一个命令行工具?

打包此类系统的典型方法是OTP版本。你可以用它


如果出于某些原因,您仍然希望使用escript,那么在启动所有应用程序和进程后,只需调用
:timer.sleep(:infinity)

注意:从Elixir 1.9开始

我们可以使用来允许脚本永不停止

下面是一个简单的脚本示例:

defmodule Mix.Tasks.NoHalt do
使用Mix.Task
def run(ux)do
系统。无停止(真)
IO.puts(“不死!”)
结束
结束

sleep解决方案看起来比
gets
更好。非常感谢。您认为能够将
--no-halt
(以及
--distached
或任何其他选项)传递给在escript中运行程序的elixir命令有意义/有用吗?正如我所说,我认为在这种情况下使用OTP版本更为惯用。我不确定
--no-halt
是否可以使用escripts,因为使用escripts,Erlang VM只运行主代码,然后停止。好吧,所有参数都直接传递给脚本,所以我看不到一种干净的方法来进行参数预处理。同样,您应该真正考虑使用OTP版本来处理您的情况。通过“在EsScript中运行程序的ILIXIR命令传递选项”,我的意思是在EsScript的编译/编译时进行。当然,我会签出OTP发行版,但我也有一种感觉,可以选择编译带有
——no halt
等标志的escript,这可能很有用。我能想到的唯一方法是在生成的脚本中插入计时器睡眠调用。这是一件你自己也可以轻松做到的事情,所以我个人不认为有什么特别的好处。但也许你应该考虑在长石核上讨论这个问题,以获得别人的意见。
elixir --no-halt -S mix run --eval 'MyApp.CLI.m
ain(["some-arg"])'
mix run --no-halt --eval 'MyApp.CLI.m
ain(["some-arg1,some-arg2"])'