diff --git a/indra/llcommon/llprocess.cpp b/indra/llcommon/llprocess.cpp
index edfdebfe872b2b3f6d564a2bf8767caa9bf2b779..8ccd39152b42ee268fb90c6ec21564f85fdbe6e4 100644
--- a/indra/llcommon/llprocess.cpp
+++ b/indra/llcommon/llprocess.cpp
@@ -145,6 +145,15 @@ class WritePipeImpl: public LLProcess::WritePipe
 		mConnection = LLEventPumps::instance().obtain("mainloop")
 			.listen(LLEventPump::inventName("WritePipe"),
 					boost::bind(&WritePipeImpl::tick, this, _1));
+
+#if ! LL_WINDOWS
+		// We can't count on every child process reading everything we try to
+		// write to it. And if the child terminates with WritePipe data still
+		// pending, unless we explicitly suppress it, Posix will hit us with
+		// SIGPIPE. That would terminate the viewer, boom. "Ignoring" it means
+		// APR gets the correct errno, passes it back to us, we log it, etc.
+		signal(SIGPIPE, SIG_IGN);
+#endif
 	}
 
 	virtual std::ostream& get_ostream() { return mStream; }