[javascript] Node.js Port 3000은 이미 사용 중이지만 실제로는 그렇지 않습니까?

몇 주 동안 node.js 프로젝트로 작업 해 왔으며 훌륭하게 작동하고 있습니다. 일반적으로 나는 npm start내 앱을 실행하고 localhost, 포트 3000의 브라우저에서 볼 때 사용 합니다.

오늘 npm start를 사용하는 동안 다음 오류가 발생하기 시작했습니다.

Server started on port 3000
Port 3000 is already in use 

리소스 모니터를 확인했는데 포트 3000에서 실행중인 다른 프로세스가 없습니다.이 오류 메시지가 나타나는 이유는 무엇입니까?

내 app.js에서 포트를 설정하는 다음 코드가 있습니다. 이것이 올바르지 않습니까? 이전에는 잘 작동 했으므로 내가 뭘 잘못하고 있는지 잘 모르겠습니다.

// Set Port
app.set('port', (process.env.PORT || 3000));
app.listen(app.get('port'), function() {
    console.log('Server started on port '+app.get('port'));
});

도와 주셔서 감사합니다!


편집하다:

netstat 및 TCPView를 실행하여 포트를 사용하는 프로세스를 확인했지만 해당 포트를 사용하는 것이 없습니다. 랩톱을 다시 시작했지만 여전히 같은 오류가 발생합니다.



답변

해당 프로세스를 종료하는 방법을 검색 할 수 있습니다.

들어 리눅스 / 맥 OS는 검색 (sudo) run터미널에서 이것을 :

$ lsof -i tcp:3000
$ kill -9 PID

Windows의 경우 :

netstat -ano | findstr :3000
tskill typeyourPIDhere 

변경 tskill에 대한 taskkill자식 bash는


답변

@sova가 제안한 것처럼 때때로 발생합니다. 이것은 때때로 EADDR이 사용 중입니다. 일반적으로 백그라운드에서 여전히 앱을 실행중인 터미널 창이 숨겨져 있습니다. 그리고 그것은 나에게도 맞습니다.

오랜 시간 동안 터미널을 열었을 때 발생합니다. 맞습니다. 프로세스를 중지했습니다. 그러나 때로는 배경에서 멈추지 않았습니다. 따라서 가장 좋은 해결책은 터미널을 닫고 다시 시작하는 것입니다. 그것은 당신의 문제를 해결할 것입니다. 제 경우에는 작동합니다.

또한,

sudo lsof -i:<PORT_NO>

현재 인스턴스를 닫지 만 백그라운드에서 프로세스를 중지 할 수 없습니다. 그래서 한 번

sudo kill <PID>

작동하지만 코드를 업데이트하고 저장하면이 문제가 Nodemon 에서와 마찬가지로 다시 발생합니다 .

따라서 터미널을 종료하면 문제가 해결됩니다. 또는

  killall -9 node


답변

아마도 이것을 참고로 삼을 수 있습니다. 이 단일 명령 줄은 주어진 포트에서 실행중인 프로세스를 종료 할 수 있습니다.

npx kill-port 3000

여기에 이미지 설명 입력


여러 포트를 죽입니다.

npx kill-port 3000 8080 4200


답변

Windows의 경우 작업 관리자는 실행중인 노드 프로세스를 확실히 보여줍니다. 프로세스를 종료하면 문제가 해결됩니다.


답변

나는 같은 문제가 있었다. (아래 단계는 Windows 10에서 잘 작동합니다) :

  1. 작업 관리자를 엽니 다 ( Ctrl+ Alt+Delete )
  2. ‘프로세스 탭’을 선택하십시오.
  3. ‘Node.js : Server-side JavaScript’를 검색합니다.
  4. 그것을 선택하고 ‘작업 끝내기’버튼을 클릭하십시오.

이제 실행할 수 있습니다. npm start .

도움이 되었기를 바랍니다.


답변

나는 똑같은 것을 보았고 위의 모든 제안을 성공하지 못했습니다. 이 문제를 해결하는 단계는 다음과 같습니다.-Wi-Fi 끄기-npm 시작 (작동해야 함)-Wi-Fi 켜기

근본 문제가 무엇인지 정확히 모르겠지만 그 문제가 해결되었습니다.


답변

포트 3000을 소유하는 프로세스 종료

먼저 포트가 열려있는 프로세스를 종료하는 방법을 살펴 보겠습니다.

lsof 명령을 사용하여 주어진 포트가있는 PID를 검색 할 수 있습니다.

$ lsof -i :3000 -t
12345

그런 다음 다음을 수행하여이 프로세스를 종료 할 수 있습니다.

$ kill 12345

이것을 한 줄로 바꿔 봅시다.

lsof -i 3000 -t | xargs kill

환경 변수를 사용하여 서버 포트를 설정하는 경우 값을 하드 코딩하는 대신 지정할 수 있습니다.

lsof -i ${PORT} -t | xargs kill

마지막으로 환경 변수가 설정되지 않은 경우 기본적으로 포트 3000을 사용할 수 있습니다.

lsof -i ${PORT:-3000} -t | xargs kill

후크를 실행하기 위해 nodemon 가져 오기

Nodemon을 사용하면 nodemon.json 구성 파일을 통해 이벤트 후크를 설정할 수 있습니다.

{
  "events": {
    "crash": "sh -c 'lsof -i :${PORT:-3000} -t | xargs kill'"
  }
}

이로 인해 nodemon ${PORT:-3000} -t | xargs은 앱이 충돌 할 때마다 sh -c ‘lsof -i : kill 명령 을 실행 하여 포트를 열어두고 생성 한 하위 프로세스를 종료합니다.

또는 당신은 이것을 시도 할 수 있습니다

fuser -k PORT-NO/tcp

예 :

fuser -k 3000/tcp