On Mon, 2007-04-16 at 11:49 +0100, Richard W.M. Jones wrote: > Olwm (the old OpenLook window manager) solved both problems in this way. > From the olwm man page[2]: > > -syncpid process-id > When olwm has completed its initialization, it will > send a signal (SIGALRM by default) to process-id. X does something similar, in that if you set the signal handler to SIG_IGN for USR1 before exec-ing it, then X will send a USR1 to its parent once it has initialised. This is solving a different problem, though - how does the parent process know when the child process has initialised and is ready to e.g. start accepting connections? That's why it has "sync" in the name - it's a synchronisation thing, rather than an error reporting thing. i.e. for error handling, you don't want to have to block for this "I'm ready" signal, you don't want to have to have timeout for the case where you never get the signal, and you want to actually know what went wrong if there was an error. The best way for a child to report an errno from exec() is to pass it back via a pipe which was created by the parent. That way the parent doesn't have to block. Note, the child should mark its side of the pipe with CLOEXEC. Cheers, Mark.