Reputation: 3802
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).
Upvotes: 79
Views: 160274
Reputation: 1209
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: yes, it is the same in Linux/unix generally. This is a more elegant way of controlling background jobs.
Update:
Note also the bg
"background" command as well as the fg
"foreground" and jobs
command. With a running process in foreground you can hit Ctrl-Z. jobs
will then show process is in background but in Stopped state. You can do e.g. bg %1
to set process running again in background.
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
.
Upvotes: 6
Reputation: 11
Just kill the terminal where you run the command to start the http server.
Upvotes: 1
Reputation: 1606
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.
Upvotes: 0
Reputation: 55972
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.
Upvotes: 3
Reputation: 380
Hitting CtrlC once(wait for traceback), then hitting CtrlC again did the trick for me :)
Upvotes: 0
Reputation: 93531
MYPORT=8888;
kill -9 `ps -ef |grep SimpleHTTPServer |grep $MYPORT |awk '{print $2}'`
That is it!
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.
Upvotes: 21
Reputation: 7443
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?
Upvotes: 44
Reputation: 986
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.
Upvotes: 44
Reputation: 2570
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
Upvotes: 13
Reputation: 6723
or you can just do kill %1
, which will kill the first job put in background
Upvotes: 15