I've got a program which is irritating me because of unreliable signals. If you run the program below then you'll probably see that it never finishes because some of the SIGCHLD signals have go missing due to the signal handler being engaged when they are issued. I think that POSIX and sigation is the way to go. In the spirit of Laziness (one of the great perl virtues ;-) - has anyone done this before? (I've been running this under Linux 2.2.16 and perl 5.6.0)
use strict; $|=1; my $forked = 0; $SIG{CHLD} = \&REAPER; # set handler for fork for (1..10) { my $pid = fork(); die "Fork failed" unless defined $pid; if ($pid == 0) { print "Hello $$\n"; sleep 1; print "Bye $$\n"; exit; } else { $forked++; print "Started child $pid\n"; } } print "Waiting for children to finish.."; while ($forked > 0) { print "[$forked] "; sleep 1; } print "Done\n"; exit; sub REAPER { my $pid = wait; $SIG{CHLD} = \&REAPER; # reinstall for sysV (not needed) print "Finished child process $pid" . ($? ? " with exit $?" : "") +. "\n"; $forked--; }

In reply to POSIX and sigaction by ncw

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.