Handle hostnames with upper-case letters
[webmin.git] / fsdump / kill.cgi
1 #!/usr/local/bin/perl
2 # kill.cgi
3 # Terminate a running backup job
4
5 require './fsdump-lib.pl';
6 &ReadParse();
7 &error_setup($text{'kill_err'});
8
9 &foreign_require("proc", "proc-lib.pl");
10 @procs = &proc::list_processes();
11 @running = &running_dumps(\@procs);
12
13 # Find the job
14 ($job) = grep { $_->{'id'} eq $in{'id'} &&
15                 $_->{'pid'} == $in{'pid'} } @running;
16 $job || &error($text{'kill_egone'});
17 &can_edit_dir($job) || &error($text{'kill_ecannot'});
18
19 # Find all sub-processes
20 @killprocs = ( $job->{'pid'}, &find_subprocesses($job->{'pid'}) );
21 &kill_logged('TERM', @killprocs);
22 sleep(1);
23 &kill_logged('KILL', @killprocs);
24 &webmin_log("kill", undef, $job->{'id'}, $job);
25 &redirect("");
26
27 sub find_subprocesses
28 {
29 local ($pid) = @_;
30 local @rv;
31 foreach my $p (@procs) {
32         if ($p->{'ppid'} && $p->{'ppid'} eq $pid) {
33                 push(@rv, $p->{'pid'}, &find_subprocesses($p->{'pid'}));
34                 }
35         }
36 return @rv;
37 }
38