giorgiosironi
giorgiosironi

Reputation: 1104

Why the Erlang shell does not terminate after all these processes have reached their end?

In https://github.com/giorgiosironi/erlang-2pc/blob/master/nodes.erl#L95 I spawn 3 processes which terminate after the algorithm has finished (or so I think: their functions return). I think also the start/0 function has terminated.

I start the execution of this function with: erl -noshell -run nodes test_commit -noshell

After executing the function, I get my expected output: <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!

but then the shell hangs there indefinitely. I exit with CTRL+C and then (A)bort.

Why the shell is not terminating by itself? How can I inspect which processes are still alive from the shell in this hanged state? If it's normal, how can I terminate it programmatically from my test script?

Upvotes: 4

Views: 471

Answers (1)

Steve Vinoski
Steve Vinoski

Reputation: 20004

You need to tell the runtime to stop once it finishes running your function. One way to do this is to use the init:stop/0 function:

erl -noinput -run nodes test_commit -s init stop

Note that the -noinput option also implies -noshell.

Upvotes: 6

Related Questions