> The exception occurs when you have a $SIG{CHLD} handler. That makes the system think you've handled it already.

Not true. The program below forks, the child exits immediately. You will see that the signal handler is fired, but the child process stays around (as a zombie) until it's reaped by the waitpid call.

$SIG{CHLD} = sub {print("SIGCHLD\n")}; exit unless $pid = fork; sleep 1; system "ps -p $pid"; waitpid $pid, 0; system "ps -p $pid"; __END__ SIGCHLD PID TTY TIME CMD 29260 pts/32 00:00:00 perl <defunct> SIGCHLD PID TTY TIME CMD SIGCHLD
The signal handler fires three times in total: one for the child process, and once each for the calls to system.

It's only when you explicitely set $SIG{CHLD} to IGNORE that child processes stay behind.

It's noteworthy to remember that POSIX does not specify what should happen if $SIG{CHLD} is ignored. (Which makes it a joy to program platform independently on Unix)


In reply to Re^2: Possible waitpid problem - pid reuse? by Anonymous Monk
in thread Possible waitpid problem - pid reuse? by tsteiger

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.