How do I shut down a python simpleHTTPserver?

Pythond3.jsSimplehttpserver

Python Problem Overview


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).

Python Solutions


Solution 1 - Python

You are simply sending signals to the processes. kill is a command to send those signals.

The keyboard command Ctrl+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?

Solution 2 - Python

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.

Solution 3 - Python

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.

Solution 4 - Python

or you can just do kill %1, which will kill the first job put in background

Solution 5 - Python

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

Solution 6 - Python

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.

Solution 7 - Python

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 CtrlC.

Solution 8 - Python

Hitting CtrlC once(wait for traceback), then hitting CtrlC again did the trick for me :)

Solution 9 - Python

Here is another solution.

Suppose You have started the server using this command -

python3 -m http.server 7800

To kill that process use -

pkill -9 -f  'python3 -m http.server 7800

That's it.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionSuzView Question on Stackoverflow
Solution 1 - PythonxbelloView Answer on Stackoverflow
Solution 2 - PythoncodersaifView Answer on Stackoverflow
Solution 3 - PythonAbdennour TOUMIView Answer on Stackoverflow
Solution 4 - PythonLachezarView Answer on Stackoverflow
Solution 5 - Pythondirkk0View Answer on Stackoverflow
Solution 6 - PythonErkView Answer on Stackoverflow
Solution 7 - Pythondm03514View Answer on Stackoverflow
Solution 8 - Pythonsmall_data88View Answer on Stackoverflow
Solution 9 - PythonAmit GhoshView Answer on Stackoverflow