[erlang-questions] Re: how do I get escript to emit all output before exiting?
Scott Lystig Fritchie
fritchie@REDACTED
Mon Apr 4 19:24:39 CEST 2011
Matthias Lang <matthias@REDACTED> wrote:
ml> What IO situation is the code above trying to take care of? Why not
ml> just
ml> my_halt(Reason) ->
ml> init:stop(Reason),
ml> receive after infinity -> ok
ml> end.
ml> Not sure if this is a bug or if I'm just expecting too much, but
ml> tossing output by default doesn't seem nice because it leads to code
ml> that seems to work except when it doesn't.
IIRC the stuff scribbled to the console via io:format() is actually done
by sending messages to the group leader process. You're at the
scheduler's whim to decide whether the group leader gets executed &
processes the I/O requests before the VM halts.
Having said that, I've been bitten by this same concurrency feature.
C/Ruby/Python folks don't expect the feature. Even never-touched-
another-language Erlang hackers may not expect it. But short of having
a function like like escript:halt/1 to take the place of your my_halt()
function ... and a whole lot of doc additions to point out that calling
io:format() is **not** a thin wrapper around the syscall/stdlib calls:
write(1, str, strlen(str));
/* OR */
fwrite(str, strlen(str), 1, stdout);
... I can't think of an easier fix. (Perhaps I simply need more
coffee?)
-Scott
More information about the erlang-questions
mailing list