If the child thread doesn't complete within
some time limit, the parent sends the child
a signal, and the child in turn attempts to
kill the external process.
If this is Windows-only code, and
the intent is to run an external command
with a time limit, I suggest you take a look
at the
Win32::Job module.
For a simple example of using it, see
Re: Timing Windows commands.
Since signals don't play nicely with threads generally
and since signals are not part of the
native Win32 API, I would stay away from signals
for your application.