Hello all
I am writing a small script using HTTP::Daemon, which I want to use to manage another service. Connecting to the daemon with a browser shows a form from which I can choose to start, stop or restart a certain service.
When I choose start, the script forks and immediately execs another program; for testing purposes, I am launching a shell scripts that runs ping 127.0.0.1; The call is as follows:/p>
my @start_command = ($service_start,'>',"${service}.out",'2>&1') + ; exec @start_command or print STDERR "ERROR: Cannot exec $service: $!\n" ;
When I push stop I would like the forked child and all subchildren to be killed. I am trying to do it with:
my ($status,$pid) = status() ; if ($pid > 0) { my $signaled ; # Try breaking my $signaled = kill "SIGINT",$pid ; sleep 1 ; ($status,$pid) = status() ; if ($pid > 0) { # Try killing gently $signaled = kill "SIGTERM",$pid ; sleep 1 ; ($status,$pid) = status() ; } # If it did not die, try killing it harder if ($pid > 0) { $signaled = kill "SIGKILL",$pid ; sleep 1 ; ($status,$pid) = status() ; } $message = $pid > 0 ? "$service_name could not be stopped, pid is $pid" : "$service_name killed" ;
Unfortunately, only the child process gets killed, all subchildren keep on running
Possible solutions:
...you have a better solution, don't you? ;-)
Ciao!
--bronto
The very nature of Perl to be like natural language--inconsistant and full of dwim and special cases--makes it impossible to know it all without simply memorizing the documentation (which is not complete or totally correct anyway).
--John M. Dlugosz
In reply to Killing a process and, recursively, all its children by bronto
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |