gpt4 book ai didi

shell - 为什么在所有这些进程都结束后,Erlang shell 没有终止?

转载 作者:行者123 更新时间:2023-12-01 22:53:16 24 4
gpt4 key购买 nike

https://github.com/giorgiosironi/erlang-2pc/blob/master/nodes.erl#L95我生成了 3 个进程,它们在算法完成后终止(或者我认为:它们的函数返回)。我认为 start/0 函数也已终止。

我开始执行这个函数:
erl -noshell -run nodes test_commit -noshell

执行该函数后,我得到了预期的输出:
<0.30.0> - As coordinator added cohort: <0.31.0>
<0.31.0> - Will propose: yes
<0.32.0> - Will propose: yes
<0.30.0> - As coordinator added cohort: <0.32.0>
<0.30.0> - As coordinator, 1st phase trying to commit
<0.31.0> - Queried by coordinator
<0.32.0> - Queried by coordinator
<0.30.0> - As coordinator received a yes
<0.30.0> - As coordinator received a yes
<0.30.0> - As coordinator, 2nd phase
<0.31.0> - COMMIT!
<0.32.0> - COMMIT!
<0.30.0> - COMMIT!

但是 shell 会无限期地卡在那里。我使用 CTRL+C 退出,然后 (A)bort。

为什么 shell 不会自行终止?如何从处于挂起状态的 shell 中检查哪些进程仍处于事件状态?如果正常,我如何从测试脚本中以编程方式终止它?

最佳答案

您需要告诉运行时在完成运行您的函数后停止。一种方法是使用 init:stop/0 函数:

erl -noinput -run nodes test_commit -s init stop

请注意,-noinput 选项也意味着 -noshell

关于shell - 为什么在所有这些进程都结束后,Erlang shell 没有终止?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27343319/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com