Part of the problem is that when you create the pipe using open(..., "-|"), calling close will always try to wait for the child to exit. Most of the time closing one end of the pipe (especially the reading end), will cause the child to terminate. However, if your child is uncooperative (for instance, ignores SIGPIPE), the close call can effectively hang. If you only have one child this is generally not a problem. However, in your case you have two child processes.

One alternative is to create the pipe using IPC::Open[23]. This will allow you to separate the closing of the pipe from the waiting/reaping of the child.

One final comment... I would close the pipes first and then reap the children. In your situation, read whatever data you need from the child , close that child's pipe and then proceed to wait for it to terminate. This also holds if you are sending data to a child via a pipe. In that case, closing your end of the pipe sends EOF to the child which is a conventional way to tell it to finish its processing and exit.


In reply to Re^2: wait versus close on a pipe by pc88mxer
in thread wait versus close on a pipe by daven7

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • 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:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.