When writing to a closed pipe, which happens with simple seq 99999 | grep -v xxx | head -1 the write() function will return an EPIPE error. The kernel also sends SIGPIPE to the process, which by default kills it. As the signal delivery is not immediate, grep may see EPIPE and report it as an error, which is annoying, especially on Android where this timing issue is encountered a lot more. See http://debbugs.gnu.org/cgi/bugreport.cgi?bug=23267 where it has been suggested to silently ignore EPIPE. That was in the context of SIGPIPE being ignored, but this should probably also been done to avoid timing issues. Feedback has been sent to the above issue and is awaiting mailing list approval. diff -u -r ../grep-2.25/src/grep.c ./src/grep.c --- ../grep-2.25/src/grep.c 2016-04-02 20:45:51.000000000 -0400 +++ ./src/grep.c 2016-04-23 06:41:54.419351897 -0400 @@ -1234,8 +1234,13 @@ if (line_buffered) fflush_errno (); - if (stdout_errno) - error (EXIT_TROUBLE, stdout_errno, _("write error")); + if (stdout_errno) { + if (stdout_errno == EPIPE) { + exit (EXIT_SUCCESS); + } else { + error (EXIT_TROUBLE, stdout_errno, _("write error")); + } + } lastout = lim; }