"address already in use"로 서버가 안 뜰 때, 그 포트를 잡고 있는 프로세스를 lsof로 찾아 끈다. lsof(list open files)는 열린 파일과 소켓을 쓰는 프로세스를 보여준다.
lsof -i :3000 # 누가 쓰는지 자세히
lsof -ti :3000 -sTCP:LISTEN # 리슨 중인 PID만
kill $(lsof -ti :3000 -sTCP:LISTEN) # 정상 종료 요청
lsof -ti :3000 | xargs kill -9 # 강제 종료-t: PID만 간결하게 출력한다. 다른 명령에 넘기기 좋다-i :포트: 해당 포트를 쓰는 인터넷 소켓만 고른다-sTCP:LISTEN: 리슨 상태만 고른다. 그 포트에 접속한 클라이언트까지 죽이는 실수를 막는다- 다른 사용자(root 등)의 프로세스는
sudo가 있어야 보인다
kill과 kill -9
kill PID는 SIGTERM(종료 요청 시그널)을 보낸다. 프로세스가 연결을 닫고 파일을 정리한 뒤 끝날 기회를 준다kill -9 PID는 SIGKILL이다. 잡을 수도 무시할 수도 없어 즉시 죽지만 정리 작업이 생략된다- 먼저 SIGTERM, 안 되면 SIGKILL 순서가 좋다
리눅스 서버에서는 ss -ltnp나 fuser -k 3000/tcp도 같은 일을 한다. 계속 같은 포트가 남아 있다면 프로세스 매니저나 macOS launchd로 상주 프로세스 띄우기가 자동으로 되살리고 있는지 확인한다. 컨테이너가 포트를 잡고 있다면 docker ps로 찾는다.