[erlang-bugs] Crash when piping stdout to 'head'?

Loïc Hoguin essen@REDACTED
Mon May 4 09:46:18 CEST 2015


On 05/04/2015 07:35 AM, Mikael Pettersson wrote:
> Eric Dahl writes:
>   > I'm relatively new to erlang but ran across a weird issue which seems like
>   > a bug. When I redirect the output to 'head -20', it causes the VM to crash.
>   > Some other types of pipes are fine though.
>   >
>   > I've encountered this initially on FreeBSD 10.1 with Erlang/OTP 17 but also
>   > reproduced on Ubuntu 14.04 with Erlang R16B03
>   >
>   > Minimal test case below:
>   >
>   > $ cat redirection_test.erl
>   > -module(redirection_test).
>   > -export([start/0]).
>   >
>   > f(0) -> 0;
>   > f(N) -> io:format("~p ~n", [N]), f(N-1).
>   >
>   > start() -> io:format("~p ~n", [f(100)]).
>   > $ erlc redirection_test.erl
>   > $ erl -noinput -s redirection_test -s init stop  | head -20
>   > 100
>   > 99
>   > ...
>   > 84
>   > 83
>   > 82
>   > 81
>   >
>   > Crash dump was written to: erl_crash.dump
>   > init terminating in do_boot ()
>   > $ uname -a
>   > Linux erlang-test 3.13.0-43-generic #72-Ubuntu SMP Mon Dec 8 19:35:06 UTC
>   > 2014 x86_64 x86_64 x86_64 GNU/Linux
>   > $ erl --version
>   > Erlang R16B03 (erts-5.10.4) [source] [64-bit] [async-threads:10]
>   > [kernel-poll:false]
>   >
>   > Eshell V5.10.4  (abort with ^G)
>   >
>   >
>   > Thanks,
>   > Eric
>
> I'm not so sure this is a bug.
>
> head -20 will close the pipe after consuming 20 lines from it.  Standard Unix
> behaviour is to send a SIGPIPE signal to a process that writes to a closed pipe,
> and unless caught or ignored that kills the process.  It looks like the Erlang
> VM ignores SIGPIPE, so the write will instead fail with EPIPE.  Presumably
> something in the call chain considers that a fatal error and terminates the VM.
>
> Unless there is documentation to the effect that the VM is supposed to handle
> this use case, I don't think this is a bug.

Make that a feature request then. It can be quite useful to have at 
times. Also add "less" usage to the list, never managed to make it work 
either.

-- 
Loïc Hoguin
http://ninenines.eu



More information about the erlang-bugs mailing list