Your child probably filled up the STDERR pipe and blocked trying to add more. You have a race condition.
- The child is blocked printing to STDERR until the parent empties some of the child's STDERR.
- The parent is blocked reading from child's STDOUT until the child sends to STDOUT.
If you don't need to capture the child's STDERR, this problem can be avoided by sending the child's STDERR to the parent's STDERR or to a file (such as /dev/null).
open3(*HIS_IN, *HIS_OUT, '>&STDERR', ...)
open(local *NULL, '>', '/dev/null') or die;
open3(*HIS_IN, *HIS_OUT, '>&NULL', ...)
If you need to capture the child's STDERR, you'd do better to use a higher-level module such as IPC::Run3 or IPC::Run. Otherwise, you'll need to use select or threads or non-blocking IO.
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.