I have a series of test scripts that launches server subprocesses of different kinds - httpd, HTTP::Server::Simple, etc. A test script might launch multiple instances of each type of server. I'd like to behave well and kill all these children before the test exits. But it's a pain to keep track of all the child pids, especially when the code that creates the subprocess is many levels down from the test script itself.

Is there any way to automatically kill all the child processes (and their descendents) created by a script? For example, can I catch each subprocess creation somehow and record the pid in a global array? Then I could kill each pid in an END block or a Guard.

At first I tried using Proc::ProcessTable to find all the processes where ppid = $$, then kill all those processes and their children. But that doesn't work, because some servers, like httpd, launch in such a way that the parent httpd process ends up with ppid = 1.

Thanks!


In reply to automatically killing all child processes created in a script by swartz

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.