[erlang-questions] Calling halt() only after I/O has completed.
Richard Carlsson
richardc@REDACTED
Wed Apr 30 09:16:05 CEST 2008
sand@REDACTED wrote:
> I have small escript that reads a bunch of files, scans them for data,
> and prints the matches to stdout ('standard_io', to be precise, going
> to the 'user' process under the hood). If there were any matches,
> then we have an error condition and the escript needs to return a
> status of 1 to the shell.
>
> If there are only a few matches, things work. If there are many
> matches, then the main process calls halt(1) while the I/O process is
> still sending the text to the terminal and the output gets truncated.
> The only way I have found to work around this is to insert a delay
> scaled by the number of records (100 ms seems to work). Calling
>
> file:close(user)
>
> to synchronously close the port and flush the output doesn't work.
> The top-level process just hangs.
>
> What's the best solution for guaranteeing that all the data gets
> printed before the program exits? This is with ERTS 5.5.4 on Linux.
init:stop()
Also see Magnus Fröberg's patch posted just a few days ago, to add
a function init:stop(Status), which has been sorely missing.
/Richard
More information about the erlang-questions
mailing list