Thanks very much for your help and information. With this info I could solve my issues rapidly.
I rebuild the example of Peter Dragon for my usage:
sub start_child
{ my $Cmd = $_[0];
my $CmdOptions = $_[1];
my $ChildProc;
my $ChildPid;
die "cannot execute cmd: $Cmd" unless (-x "$Cmd");
require Win32::Process;
Win32::Process::Create($ChildProc, $Cmd, $CmdOptions, 0, 0, ".") ||
+confess "Could not spawn child: $!";
$ChildPid = $ChildProc->GetProcessID();
# catch early child exit, e.g. if program path is incorrect
sleep(1.0);
POSIX::waitpid(-1, POSIX::WNOHANG()); # clean up any defunct child p
+rocess
if (kill(0,$ChildPid))
{ print "Started child process id $ChildPid\n";
}
else
{ warn "Child process exited quickly: $Cmd: process $ChildPid";
}
return $ChildPid;
}
$ChildPid = start_child($Cmd1, $Cmd1Options);
sleep(5.0);
$ChildPid = start_child($Cmd2, $Cmd2Options);
At the moment I stop the childs by TASKKILL /F /PID of the commands I've started. Not the nicest solution, better to do it with interrupts, but I haven't read that part of the Perl cookbook yet ;) |