2014-12-07 73 views
3

https://github.com/giorgiosironi/erlang-2pc/blob/master/nodes.erl#L95我产生了3个进程,在算法结束后终止(或者我认为:他们的函数返回)。 我认为启动/ 0功能已经终止。为什么在所有这些进程到达最终状态之后,Erlang shell都不会终止?

我开始这个功能与执行: 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!

但随后的壳挂在那儿下去。我用CTRL + C退出,然后(A)退出。

为什么shell不会自行终止?如何在挂起状态下检查哪些进程仍处于活动状态?如果这是正常的,我怎样才能从我的测试脚本以编程方式终止它?

+0

'init:stop()'是以干净的方式终止erlang的标准方式。它首先停止所有的应用程序,然后erlang系统本身。 – rvirding 2014-12-08 11:37:51

回答

5

您需要告诉运行库在完成运行功能后停止运行。要做到这一点的方法之一是使用init:stop/0功能:

erl -noinput -run nodes test_commit -s init stop 

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

+0

我认为这意味着'节点:test_commit/0'必须等待产生的进程终止,但这很好,谢谢。 – giorgiosironi 2014-12-08 10:58:01

相关问题