우분투 실전 명령어 | lsof/fuser로 포트 충돌 프로세스 찾기
언제 쓰는가
운영 중인 서버에서 "포트는 열려 있는데 어떤 프로세스가 잡고 있는지" 빨리 확인해야 할 때가 자주 있습니다. 특히 배포 직후 address already in use 에러가 나면 서비스 코드보다 먼저 포트 점유 상태부터 봐야 시간을 아낄 수 있습니다. 이 글은 lsof, ss, fuser 조합으로 포트 충돌을 안전하게 진단하고 정리하는 최소 패턴만 정리합니다.
바로 쓰는 명령어
# 1) 8080 포트를 누가 LISTEN 중인지 확인
sudo ss -ltnp | grep ':8080'
# 2) PID 기준으로 프로세스 상세 확인
ps -fp <PID>
# 3) lsof로 포트 점유 프로세스 확인 (프로세스명/유저까지 함께 확인)
sudo lsof -iTCP:8080 -sTCP:LISTEN -nP
# fuser로 포트 점유 PID 확인
sudo fuser -v 8080/tcp
# 정말 종료가 필요할 때만 (사전 확인 후)
sudo kill -TERM <PID>
# 종료 후 포트 해제 확인
sudo ss -ltnp | grep ':8080' || echo "8080 포트 리스닝 프로세스 없음"
핵심 옵션/패턴
ss -ltnp-l: LISTEN 소켓만-t: TCP만-n: 포트/주소를 숫자로 표시(DNS 역조회 지연 방지)-p: PID/프로세스명 표시(권한 필요)lsof -iTCP:포트 -sTCP:LISTEN -nP- 실제 서비스가 리스닝 중인지 빠르게 단정할 때 유용합니다.
kill -TERM→kill -KILL순서- 운영에서는 먼저 정상 종료 시그널(
TERM)을 주고, 반응이 없을 때만 강제 종료(KILL)를 고려합니다.
자주 하는 실수
sudo없이 확인해서 PID가 비어 보이는데 "프로세스가 없다"고 판단하는 실수LISTEN이 아닌ESTABLISHED연결을 보고 점유 프로세스를 잘못 잡는 실수- 바로
kill -9부터 사용해 데이터 flush/정리 기회를 날리는 실수 - 시스템 서비스 PID를 임시 앱으로 착각해 종료해버리는 실수(항상
ps -fp PID로 재확인)
검증 방법
# 포트 점유 여부 + 서비스 응답까지 함께 확인
sudo ss -ltnp | grep ':8080'
curl -I http://127.0.0.1:8080
ss결과에 목표 PID가 보이고curl응답 코드(200/301/302 등)가 기대와 맞으면 정상입니다.
운영 팁
- 배포 스크립트에 "기동 전 포트 점유 점검" 단계를 넣어두면 충돌을 사전에 차단할 수 있습니다.
- 같은 서버에서 여러 앱을 띄울 때는 서비스별 포트 맵(예: 8080, 8081, 9090)을 문서로 고정해 두면 재발이 줄어듭니다.
출처
- Ubuntu Manpages
- Linux man-pages project
- Red Hat Documentation