본문 바로가기
SW 개발/Python

Python: OSError: [Errno 98] Address already in use (Flask)

by Kibua20 2020. 7. 26.

Python으로 Web framework인 Flask를 공부하다가 발생하나 에러입니다. Flask에서 5000 포트를 사용하고 있는데 Flask 모듈이 비정상적으로 종료해서 5000 포트를 잡고 있어 발생하는 에러입니다. 

 

에러 메시지 

Traceback (most recent call last):
File "/usr/lib/python3.8/runpy.py", line 193, in _run_module_as_mainreturn _run_code(code, main_globals, None,
File "/usr/lib/python3.8/runpy.py", line 86, in _run_codeexec(code, run_globals)

(중략)

File "/usr/local/lib/python3.8/dist-packages/werkzeug/serving.py", line 996, in inner srv = make_server(
File "/usr/local/lib/python3.8/dist-packages/werkzeug/serving.py", line 847, in make_server return ThreadedWSGIServer( File "/usr/local/lib/python3.8/dist-packages/werkzeug/serving.py", line 740, in __init__HTTPServer.__init__(self, server_address, handler)
File "/usr/lib/python3.8/socketserver.py", line 452, in __init__self.server_bind()
File "/usr/lib/python3.8/http/server.py", line 138, in server_bindsocketserver.TCPServer.server_bind(self)
File "/usr/lib/python3.8/socketserver.py", line 466, in server_bindself.socket.bind(self.server_address)
OSError: [Errno 98] Address already in use

 

해결 방법

flask가 생성한 process를 강제로 kill 합니다. PID를 확인하기 위해서 lsof (list open files) 명령어 열려진 socket 파일들을 보는 명령어입니다

 

# flask 가 생성한 pip를 확인

$ sudo lsof -i :5000

COMMAND  PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
flask            9066 kibua    3u  IPv4  82012      0t0  TCP localhost:5000 (LISTEN)
python3     9069 kibua    3u  IPv4  82012      0t0  TCP localhost:5000 (LISTEN)
python3     9069 kibua    4u  IPv4  82012      0t0  TCP localhost:5000 (LISTEN)

 

# kill 명령어로 -SIGKILL(-9) 을 PID에 전달

$ sudo kill -9 9066 9069


열린 인터넷 포트 확인하는 리눅스 명령어

$ netstat -tnlp

[--tcp|-t]   
tcp 포트
[--udp|-u] 
udp 포트
--numeric, -n

       Show numerical addresses instead of trying to determine symbolic host, port or user names.
 -p, --program
       Show the PID and name of the program to which each socket belongs.
  -l, --listening
       Show only listening sockets.  (These are omitted by default.)

 

(실행 결과)

Proto Recv-Q Send-Q Local Address     Foreign Address      State          PID/Program name    
tcp        0      0 127.0.0.1:5000                 0.0.0.0:*               LISTEN      8029/python3        
tcp        0      0 127.0.0.53:53                        0.0.0.0:*               LISTEN      -                   

 

관련 글

[개발환경] - GCP (Google Cloud) 방화벽 설정: 프로토콜과 포트를 사용 허용 또는 거부하기

[모바일 SW 개발/Python] - Python: OSError: [Errno 98] Address already in use (Flask)

[개발환경] - Google Cloud Platform을 활용하여 평생 '무료' PC 만들기

[모바일 SW 개발/Python] - Python code 숨기는 방법: PyInstaller로 실행 파일 만들기

[모바일 SW 개발/Python] - Python 여러 버전 설치 방법 (3.x and 3.y 동시 설치)

[모바일 SW 개발/Python] - Python 폴더 및 파일 처리 함수 모음

[모바일 SW 개발/REST API] - Service Account(JWT)을 활용한 Google Calendar API 사용

[모바일 SW 개발/Android] - Repo 에러: repo sync unable to read sha1 file of xxx, cannot initialize work tree

[모바일 SW 개발/Python] - Python 에러: /usr/bin/env: `python3\r': 그런 파일이나 디렉터리가 없습니다

[모바일 SW 개발/Python] - Python 소스 숨기는 방법: pyc 활용 (Bytecode로 컴파일)

[모바일 SW 개발/Python] - Python 표준 입출력(stdin/stdout) 활용 - 리눅스 프로그램과 연동

[모바일 SW 개발/Python] - Python JSON 사용 시 TypeError: Object of type bytes is not JSON serializable

[모바일 SW 개발/Python] - Python smtplib 사용한 email 발송 예제 (gmail)

[모바일 SW 개발/Python] - Python SyntaxError: Non-ASCII character in file on, but no encoding declared

[모바일 SW 개발/Python] - Python 2.7과 3.8호환성: a bytes-like object is required, not 'str'에러 수정




댓글