how do I prevent the close() from blocking until the child exits?You could delay the close until you know for sure the child process has finished. Use the non blocking version of waitpid for this. From the docs:
This will see if any child has died (without blocking) and return the PID of said child (and the return value in $?, as normal). You can also wait for a specific child by using the pid of that child as first argument to waitpid.use POSIX ":sys_wait_h"; $kid = waitpid(-1, WNOHANG);
Using this, you can make sure you only close the filehandle when the child has already exited. Just periodically check whether the child is dead, and close its filehandle if it is (you'll get a -1 return from the close, but that should be no problem).
Unfortunately, this is not portable to all OS. See waitpid for more information.
Update: 'now' ne 'know'
CU
Robartes-
In reply to Re: Re: open(KID, "-|") and wait()?
by robartes
in thread open(KID, "-|") and wait()?
by edan
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |