24

I'm trying to learn python (using the Flask micro-framework) and I am confused because somewhere in my code i'm keeping the server open I believe.

I spin up my server with 'python app.py' and then close it however.... it still lives!

I'm not sure how this is possible but i must have done something wrong with a connection.

There are two questions here really.

First: How can I find the active connection/socket and close it

Second: Is there a way I can diagnose what is having an open connection, my hunch is that sqlLite is not closing as it is the last thing I implemented.

This is a one file application (minus a config file and static content) so I can post the code if required.

Error generated (Folder locations changed):

/Development/flask_projects/test_email/env/bin/python /Development/flask_projects/test_email/app.py
 * Running on http://127.0.0.1:5000/
Traceback (most recent call last):
  File "Development/flask_projects/test_email/app.py", line 58, in <module>
    app.run()
  File "Development/flask_projects/wtchn_email/env/lib/python2.7/site-packages/Flask-0.8-py2.7.egg/flask/app.py", line 703, in run
    run_simple(host, port, self, **options)
  File "/Library/Python/2.7/site-packages/Werkzeug-0.7.1-py2.7.egg/werkzeug/serving.py", line 612, in run_simple
    test_socket.bind((hostname, port))
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/socket.py", line 224, in meth
    return getattr(self._sock,name)(*args)
socket.error: [Errno 48] Address already in use
1
  • 1
    How are you "closing" the server? Commented Oct 9, 2011 at 16:24

3 Answers 3

83

If you use linux you can use lsof to find out which process is using a given port, you might have to install it first though, usage is pretty simple:

lsof -i :5000
Sign up to request clarification or add additional context in comments.

4 Comments

lsof -i :5000 for the win! Then just kill the offending PID. Probably there is a more elegant way, but this gets us in the door. Thanks!
worked on OSX 10.8 without having to install anything. Thanks.
Note: if the process was run as sudo, it won't show up with just lsof. You'll need sudo lsof.
Works on OSX 10.13 as well... @Ole You saved a lot of my time.
10

To kill the python process which is listening on port 5000 :

sudo lsof -i :5000 | grep "python" | cut -d " " -f3 | xargs kill -9

1 Comment

Doesn't work anymore on Arch Linux. (use -f2 instead of -f3)
7

You're probably closing the server using Ctrl-Z. If so, use Ctrl-C instead.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.