Beefy Boxes and Bandwidth Generously Provided by pair Networks Bob
Clear questions and runnable code
get the best and fastest answer
 
PerlMonks  

Re^7: Stopping an HTTP::Server::Simple server

by tilly (Archbishop)
on Jan 26, 2011 at 16:56 UTC ( #884384=note: print w/ replies, xml ) Need Help??


in reply to Re^6: Stopping an HTTP::Server::Simple server
in thread Stopping an HTTP::Server::Simple server

If your server is non-forking, you should be able just call exit to stop the server. That will do the same thing as the kill line.

If the server is forking under the hood, then in handling a web request you are just killing the child process that is handling that request and another will be spawned shortly. In that case you would need to kill some set of processes to shut it down. What set depends on how it is set up. For instance if it forks for every request received, then killing your parent process (which getppid should give you) will do it. If it preforks and has a pool of processes, then you need to kill them all. Typically you can do that by sending the right signal to the parent process.

Given your described behavior, it sounds like it may be forking. (That, or kill -9 is failing somehow.)


Comment on Re^7: Stopping an HTTP::Server::Simple server
Re^8: Stopping an HTTP::Server::Simple server
by textual (Novice) on Jan 26, 2011 at 17:28 UTC

    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;

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://884384]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others perusing the Monastery: (12)
As of 2014-04-18 17:18 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    April first is:







    Results (471 votes), past polls