Rob Browning <[EMAIL PROTECTED]> writes: > >>From the output of ps auxf, it looks like the child is probably one of > these zombies. There are several zombie sh children: > > \_ [sh] <defunct> > \_ [sh] <defunct> > \_ [sh] <defunct> > \_ [lt-guile] <defunct> > \_ [lt-guile] <defunct>
Actually, I see the signalling pipe is left in the parent, so if the child has printed nothing it could hang. Obviously there's something wrong if the child doesn't print what's expected, but the change below should at least cause an error instead of a hang in that case. ;; After the child closes stdin (which it indicates here by writing ;; "closed" to stderr), the parent should see a broken pipe. We setup to ;; see this as EPIPE (rather than SIGPIPE). In Guile 1.6.4 and earlier a ;; duplicate of stdin existed in the child, preventing the broken pipe ;; occurring. (pass-if "no duplicate" (with-epipe (lambda () (let* ((pair (pipe)) (port (with-error-to-port (cdr pair) (lambda () (open-output-pipe "exec 0</dev/null; echo closed 1>&2; exec 2>/dev/null; sleep 999"))))) (close-port (cdr pair)) ;; write side (and (char? (read-char (car pair))) ;; wait for child to do its thing (catch 'system-error (lambda () (write-char #\x port) (force-output port) #f) (lambda (key name fmt args errno-list) (= (car errno-list) EPIPE)))))))) _______________________________________________ Guile-devel mailing list Guile-devel@gnu.org http://lists.gnu.org/mailman/listinfo/guile-devel