--- lib/PXElator/httpd.pm 2009/07/30 22:44:21 69
+++ lib/PXElator/httpd.pm 2009/07/30 22:44:55 70
@@ -19,7 +19,8 @@
use IO::Socket::INET;
use Module::Refresh;
-our $pids = { httpd => $$ };
+our $pids;
+$pids = { httpd => $$ } unless defined $pids; # keep pids on refresh
sub DESTROY {
warn "pids ",dump( $pids );
@@ -36,6 +37,7 @@
our $url = "http://$server::ip:$port";
use html;
+our $static_pids;
sub static {
my ($client,$path) = @_;
@@ -44,6 +46,14 @@
return if ! -f $full;
+ if ( my $pid = fork ) {
+ # parent
+ close($client);
+ print "http static child $pid\n";
+ $static_pids->{$pid} = $path;
+ return 1;
+ }
+
my $type = 'application/octet-stream';
$type = 'text/html' if $path =~ m{\.htm};
$type = 'application/javascript' if $path =~ m{\.js};
@@ -70,7 +80,7 @@
print "$path $pos == $size OK\n";
- return $path;
+ exit;
}
use boolean;
@@ -132,7 +142,9 @@
'debug', qq|$debug|,
);
- foreach my $name ( %$pids ) {
+
+ warn 'pids: ', dump( $pids );
+ foreach my $name ( keys %$pids ) {
my $pid = $pids->{$name} || next;
my $proc = "/proc/$pid/status";
@@ -144,6 +156,16 @@
push @rows, ( $name => $html );
}
+ warn 'static_pids: ', dump( $static_pids );
+ foreach my $pid ( keys %$static_pids ) {
+ my $path = $static_pids->{$pid};
+ if ( -d "/proc/$pid" ) {
+ push @rows, ( $path => qq|$pid| );
+ } else {
+ push @rows, ( $path => "$pid competed" );
+ }
+ }
+
print $client $ok, html::table( 2, @rows );
} elsif ( $path =~ m{^/our/(\w+)/(\S+)} ) {
@@ -153,6 +175,9 @@
server::debug( $debug ) if $1 eq 'debug';
} elsif ( $path =~ m{^/(screen|kvm)} ) {
print $client $redirect, start_stop($1);
+ } elsif ( $path =~ m{^/kill/static/(\d+)} ) {
+ print $client $redirect;
+ kill 9, $1 && warn "killed $1";
} elsif ( $path eq '/exit' ) {
# DESTROY;
exit 0;