【问题标题】:How do I send flags to the erlang vm using :emu_args?如何使用 :emu_args 向 erlang vm 发送标志?
【发布时间】:2019-11-19 11:12:54
【问题描述】:

我想向 erlang 虚拟机发送参数,但 'emu_args: "+A32"' 出现在 "-escript main parallel_tree_walk_escript" 之后,并且似乎成为 elixir 程序的参数,而不是影响 erlang 虚拟机。

如果没有'emu_args: "+A32"',"mix escript.build" 创建的文件包含第三行

%%! -escript main parallel_tree_walk_escript

如果我用 emacs(很好地处理非 ascii 内容)将该行更改为

,我似乎得到了我想要的结果
%%! +A32 -escript main parallel_tree_walk_escript

但是,如果我在 mix.esx 中使用 'emu_args: "+A32",则该行变为

%%! -escript main parallel_tree_walk_escript +A32

...和“+A32”似乎没有进入 erlang 虚拟机,而是作为 args 数组的第一个命令行元素出现。

# permits emacs edit of parallel_tree_walk result
  def escript do
    [
      main_module: ParallelTreeWalk,
    ]
  end

但这显然把论点放在了错误的位置:

  def escript do
    [
      main_module: ParallelTreeWalk,
      emu_args: "+A32"
    ]
  end

希望

%%! +A32 -escript main parallel_tree_walk_escript

但结果是

%%! -escript main parallel_tree_walk_escript +A32

这不起作用。

【问题讨论】:

    标签: elixir elixir-mix escript


    【解决方案1】:

    如果我生成一个 escript,并手动添加 -emu_args 标志,就像移动 +A32 标志一样,无论 +A32 是在 escript 名称之前还是之后,我都会得到相同的输出:

    # %%! -emu_args -escript main test_escript +A32 
    # %%! +A32 -emu_args -escript main test_escript
    

    两者都产生(为简洁起见,截断了一些路径):

    Executing: …beam.smp ./test -B -A32 -- -root …erlang/21.3 -progname erl -- -home /Users/adam -- -boot no_dot_erlang -noshell -escript main test_escript -run escript start -extra ./test

    也许您可以尝试添加emu_args 参数以查看发生了什么。可能是 +A32 标志正在进入 VM。

    这是我第一次查看 escripts,所以我很好奇 beam 的参数最终是 -A32 而不是 +A32,但这似乎是直接执行模拟器之间的区别,或者通过脚本。调用…beam.smp --help 确实列出了-A 版本以及最后的注释:

    请注意,如果模拟器以 erlexec 启动(通常 来自 erl 脚本),这些标志应该用 + 指定。

    【讨论】:

    • 好吧,现在我不知道该怎么想:我认为失败的第三行末尾的“+A32”(“不起作用”)完全按预期工作今天,因为 main(args \\ []) 的参数列表是它们应该与“./parallel_tree_walk”一起使用的。调用,并且 ":erlang.system_info(:thread_pool_size)" 完全按照预期返回 32。我不知道发生了什么。也许我有一个错字,在我的各种尝试中被删除了。谢谢你的时间。
    猜你喜欢
    • 2021-06-14
    • 1970-01-01
    • 2010-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-14
    • 1970-01-01
    相关资源
    最近更新 更多