수신 대기 포트
다른 이름: 열린 포트, 포트 3000을 쓰는 프로세스, listening port
간단한 답
수신 대기 포트는 포트 3000의 웹 서버처럼 프로세스가 들어오는 연결을 기다리는 네트워크 포트입니다. 한 포트와 주소에서는 한 번에 한 프로세스만 수신 대기할 수 있으므로, "address already in use" 같은 오류가 나타납니다.
개발 서버, 데이터베이스, 일부 앱은 수신 대기 포트를 엽니다. 서버를 시작했는데 포트가 사용 중이라 실패한다면, 다른 프로세스가 아직 그 포트에서 수신 대기하고 있는 것이며, 같은 서버의 이전 실행본인 경우가 많습니다.
활성 상태 보기는 프로세스의 열린 파일 및 포트를 보여 줄 수 있지만, 어떤 프로세스가 포트를 쓰고 있는지 가장 빨리 찾는 방법은 터미널의 lsof 명령입니다.
이 페이지의 내용
포트를 쓰고 있는 프로세스 찾는 방법
터미널에서 lsof -nP -iTCP:3000 -sTCP:LISTEN 명령을 실행합니다. 3000은 사용하는 포트로 바꾸세요. 출력에 명령 이름과 PID가 나옵니다.
수신 대기 중인 TCP 포트를 모두 나열하려면 lsof -nP -iTCP -sTCP:LISTEN 명령을 실행합니다. 다른 사용자가 소유한 프로세스까지 포함하려면 앞에 sudo를 붙입니다.
포트를 비우는 방법
직접 시작한 서버라면 먼저 평소처럼 멈추세요. 예를 들어 서버가 실행 중인 터미널에서 Control-C를 누릅니다. 그렇지 않다면 lsof로 얻은 PID로 kill <PID> 명령을 실행합니다. kill -9 <PID> 명령은 그래도 끝나지 않을 때만 사용하세요.
멈추기 전에 프로세스 이름을 확인하세요. 일부 포트는 macOS 서비스의 것입니다. 예를 들어 최근 macOS 버전에서는 AirPlay 수신기가 포트 5000과 7000에서 수신 대기합니다.
활성 상태 보기에서 포트 보는 방법
프로세스를 이중 클릭하고 열린 파일 및 포트 탭을 엽니다. 프로세스가 열어 둔 파일과 네트워크 연결이 나열됩니다.
lsof 출력 읽는 방법
각 줄이 열린 소켓 하나입니다. 서버는 보통 IPv4와 IPv6에 하나씩, PID가 같은 두 줄로 나옵니다.
- COMMAND는 프로세스 이름이며, 기본적으로 9자에서 잘립니다. 전체 이름을 보려면
+c 0을 추가하세요:lsof +c 0 -nP -iTCP -sTCP:LISTEN. - PID는
kill이나ps에 넘겨주는 프로세스 ID입니다. - USER는 프로세스를 실행하는 계정입니다. root가 소유한 프로세스는 대개 macOS나 설치된 서비스의 일부입니다.
- NAME은 주소와 포트를 보여 줍니다.
*:3000은 서버가 모든 네트워크 인터페이스에서 연결을 받는다는 뜻입니다.127.0.0.1:3000이나[::1]:3000은 이 Mac만 연결할 수 있다는 뜻입니다.
개발 서버가 어느 프로젝트의 것인지 확인하는 방법
프로세스 이름은 node, python, ruby뿐인 경우가 많아서 어떤 프로젝트가 실행 중인지 알 수 없습니다. 두 명령으로 확인할 수 있습니다.
lsof -nP -iTCP:3000 -sTCP:LISTEN명령으로 PID를 얻습니다.ps -o pid,ppid,command -p <PID>명령을 실행해 서버를 시작한 전체 명령을 확인합니다.lsof -a -p <PID> -d cwd명령을 실행해 서버가 실행 중인 폴더를 확인합니다. 대개 프로젝트 폴더입니다.- PPID가 셸을 가리킨다면 그 서버는 터미널 윈도우에서 시작된 것입니다. 그 윈도우가 아직 열려 있다면 거기서 Control-C로 멈추세요.
아무것도 실행하지 않은 것 같은데 포트가 사용 중인 이유
포트가 AirPlay 수신기의 것이라면 서버를 다른 포트에서 실행하거나, 시스템 설정 > 일반의 AirDrop 섹션에서 AirPlay 수신기를 끄세요.
- 이전 세션의 서버가 잊고 있던 터미널 탭이나 윈도우에서 아직 실행 중입니다.
- 서버가 백그라운드에서, 또는 편집기나 다른 도구에 의해 시작되어 보이는 윈도우가 없습니다.
- 서버는 충돌했지만 서버가 시작한 하위 프로세스가 아직 포트를 쥐고 있습니다.
- 포트 5000과 7000의 AirPlay 수신기처럼 macOS 서비스가 같은 포트를 씁니다.
활성 상태 보기의 포트 열은 네트워크 포트가 아닙니다
활성 상태 보기의 CPU 탭에는 선택해서 표시할 수 있는 포트 열이 있습니다. 이 열은 macOS가 프로세스 사이에 메시지를 주고받는 방식인 Mach 포트를 세며, top 명령이 ports로 보여 주는 수치와 같습니다. 네트워크 포트는 나열하지 않습니다. 네트워크 포트는 lsof나 프로세스 정보 윈도우의 열린 파일 및 포트 탭에서 확인하세요.
자주 묻는 질문
Mac에서 포트 3000을 쓰는 프로세스는 어떻게 확인하나요?
터미널에서 lsof -nP -iTCP:3000 -sTCP:LISTEN 명령을 실행하세요. 그 포트에서 수신 대기하는 프로세스의 이름과 PID가 표시됩니다.
Mac에서 포트를 쓰는 프로세스는 어떻게 끝내나요?
lsof로 PID를 찾은 다음 kill <PID> 명령을 실행하세요. 끝나지 않으면 kill -9 <PID> 명령으로 즉시 끝낼 수 있습니다.
Mac에서 열린 포트를 모두 나열하려면 어떻게 하나요?
lsof -nP -iTCP -sTCP:LISTEN 명령을 실행하면 수신 대기 중인 TCP 포트가 나열됩니다. 다른 사용자의 프로세스까지 포함하려면 sudo를 붙이세요.
"address already in use"는 무슨 뜻인가요?
다른 프로세스가 이미 그 포트와 주소에서 수신 대기하고 있다는 뜻입니다. lsof -nP -iTCP:<port> -sTCP:LISTEN 명령으로 찾은 다음 멈추거나 다른 포트를 고르세요.
사용 중인 포트인데 lsof에 아무것도 나오지 않는 이유는?
그 프로세스가 다른 사용자나 root의 것일 수 있습니다. 같은 명령 앞에 sudo를 붙여 실행하면 모든 프로세스가 포함됩니다.
포트 5000이나 7000을 쓰는 프로세스를 끝내도 안전한가요?
이름을 확인하지 않고는 안 됩니다. 최근 macOS 버전에서는 이 포트를 AirPlay 수신기가 쓰는 경우가 많으며, 대신 시스템 설정에서 끌 수 있습니다.
관련 항목
단계별 안내: Docker 메모리 과다 사용.
활성 상태 보기보다 나은 것을 찾고 있나요? Mac용 활성 상태 보기 대체 앱 추천을 확인하거나 용어집의 모든 용어를 둘러보세요.