Thanks again for your help, which makes this site the unique resource it is.
Using exit from within the handler does the job! This seems to be the natural solution I've failed to come up with. So in Webserver.pm:
package MyWebServer;
use strict;
use warnings;
use HTTP::Server::Simple::CGI;
use base qw(HTTP::Server::Simple::CGI);
sub handle_request {
exit;
}
1;
For the sake of completeness, here's the code where the PID was written in a file (with some diagnostics sent to STDERR). Note that it didn't stop the server:
In test.pl:
use strict;
use warnings;
use MyWebServer;
my $server = MyWebServer->new( 8080 );
my $pid = $server->background();
print STDERR $pid, "\n";
open( my $fh, '>', 'pid.txt' ) || die;
print $fh $pid;
close $fh;
And in Webserver.pm:
package MyWebServer;
use strict;
use warnings;
use HTTP::Server::Simple::CGI;
use base qw(HTTP::Server::Simple::CGI);
sub handle_request {
open( my $fh, '<', 'pid.txt' ) || die;
my $pid = <$fh>;
close $fh;
print STDERR $pid, "\n";
kill 9, $pid;
}
1;
|