this should fix the most common reason for SIGPIPE... if the write to the angel fails cause of a EPIPE it puts alive_descriptor to -1 and no longer tries to write to it... void do_alive_ping ( void ) { static int count = 5; count--; if (!count && alive_descriptor > 0) { count = 5; if (write (alive_descriptor, "SpAng!", 6) < 0) { if (errno != EPIPE) return; log ("sigpipe", "Angel pipe closed"); close (alive_descriptor); /* try to clean up */ alive_descriptor = -1; } } } youll still get one entry in the logs when its initally found. the log() is for reference so that any matching calls in sigpipe will be known staight off its from the angel not around... note ...if for some reason the write fails.. and the errno is EPIPE, But the angel is still alive (this possible?), the talker will be thought dead and attempts will be made to boot it...