So I'm trying to learn d3, and the wiki suggested that
To view the examples locally, you must have a local web server. Any web server will work; for example you can run Python's built-in server:
python -m SimpleHTTPServer 8888 &
Great... only now I have a server running... but at some point I think I should probably shut that down again.
Is there a better way of shutting it down than using kill <pid>? That seems like kind of a big hammer for a little job.
(I'm running Mac OS 10.6.8 (Snow Leopard))
FWIW: ctrl+c gives about 10 lines of traceback, complaining about being interrupted.
kill -3 <pid> gives a Finder warning in a separate window 'Python quit unexpectedly'.
The default kill <pid> and kill -15 <pid> are relatively clean (and simple).
You are simply sending signals to the processes. kill is a command to send those signals.
The keyboard command Ctrl+C (⌃+C) sends a SIGINT, kill -9 sends a SIGKILL, and kill -15 sends a SIGTERM.
What signal do you want to send to your server to end it?
if you have started the server with
python -m SimpleHTTPServer 8888
then you can press ctrl + c to down the server.
But if you have started the server with
python -m SimpleHTTPServer 8888 &
or
python -m SimpleHTTPServer 8888 & disown
you have to see the list first to kill the process,
run command
ps
or
ps aux | less
it will show you some running process like this ..
PID TTY TIME CMD
7247 pts/3 00:00:00 python
7360 pts/3 00:00:00 ps
23606 pts/3 00:00:00 bash
you can get the PID from here. and kill that process by running this command..
kill -9 7247
here 7247 is the python id.
Also for some reason if the port still open you can shut down the port with this command
fuser -k 8888/tcp
here 8888 is the tcp port opened by python.
Hope its clear now.
or you can just do kill %1, which will kill the first job put in background
MYPORT=8888;
kill -9 `ps -ef |grep SimpleHTTPServer |grep $MYPORT |awk '{print $2}'`
THat is it !!
Explain command line :
ps -ef: list all process.grep SimpleHTTPServer: filter process which belong to "SimpleHTTPServer"grep $MYPORT: filter again process belong to "SimpleHTTPServer" where port is MYPORT (.i.e: MYPORT=8888)awk '{print $2}': print second column of result which is the PID (Process ID)kill -9 <PID>: Force Kill process with the appropriate PID.
Turns out there is a shutdown, but this must be initiated from another thread.
This solution worked for me: https://stackoverflow.com/a/22533929/573216
When you run a program as a background process (by adding an & after it), e.g.:
python -m SimpleHTTPServer 8888 &
If the terminal window is still open you can do:
jobs
To get a list of all background jobs within the running shell's process.
It could look like this:
$ jobs
[1]+ Running python -m SimpleHTTPServer 8888 &
To kill a job, you can either do kill %1 to kill job "[1]", or do fg %1 to put the job in the foreground (fg) and then use ctrl-c to kill it. (Simply entering fg will put the last backgrounded process in the foreground).
With respect to SimpleHTTPServer it seems kill %1 is better than fg + ctrl-c. At least it doesn't protest with the kill command.
The above has been tested in Mac OS, but as far as I can remember it works just the same in Linux.
Update: For this to work, the web server must be started directly from the command line (verbatim the first code snippet). Using a script to start it will put the process out of reach of jobs.
It seems like overkill but you can use supervisor to start and stop your simpleHttpserver, and completely manage it as a service.
Or just run it in the foreground as suggested and kill it with control c
Hitting ctrl + c once(wait for traceback), then hitting ctrl+c again did the trick for me :)
来源:https://stackoverflow.com/questions/12647196/how-do-i-shut-down-a-python-simplehttpserver