Given:
my $child_pid = open( my $out, "-|", "some command" );
The parent process opens a read filehandle
$out from the child/command's STDOUT. This statement is non-blocking, as you observed. Note that if
$child_pid is undefined, the command execution failed.
If the child writes a lot to STDOUT, the
child will eventually
block when the pipe between the parent & child is full. It is up to the parent process to read data off from the pipe (read
$out) so that the child may
unblock to write more.
However, merely reading from
$out does not
guarantee that the parent will "wait" for the command to finish. The child process could still be doing something else after it's last write to STDOUT, or even closing its STDOUT prior to doing more.
To really
wait for the command to finish:
waitpid($child_pid, 0);
Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
Read Where should I post X? if you're not absolutely sure you're posting in the right place.
Please read these before you post! —
Posts may use any of the Perl Monks Approved HTML tags:
- a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
| |
For: |
|
Use: |
| & | | & |
| < | | < |
| > | | > |
| [ | | [ |
| ] | | ] |
Link using PerlMonks shortcuts! What shortcuts can I use for linking?
See Writeup Formatting Tips and other pages linked from there for more info.