오류에서 localhost를 해제하는 방법 : EADDRINUSE 수신


120

Windows 7에서 nodejs로 작성된 서버를 테스트 중이며 명령 줄에서 테스터를 실행하려고하면 다음 오류가 발생합니다.

Error: listen EADDRINUSE
at errnoException (net.js:614:11)
at Array.0 (net.js:704:26)
at EventEmitter._tickCallback (node.js:192:40)

재부팅하지 않고 어떻게 고칠 수 있습니까?


9
sudo killall node편리 할 수 있습니다
Hashir 후세인

답변:


101

이는 서버를 바인딩하려는 주소가 사용 중임을 의미합니다. 다른 포트를 시도하거나 해당 포트를 사용하여 프로그램을 닫으십시오.


포트 3000을 사용하여 아무것도 찾을 수 없지만 변경하면 효과가 있습니다!
Dennis

7
이 단일 노드 프로그램이 내 컴퓨터에서 포트 3000을 사용하는 유일한 프로그램이기 때문에, 내 노드 프로세스의 이전 인스턴스화가 제대로 종료되지 않도록하는 일이 발생했다는 것이 분명해 보입니다. node app.jsCtrl + C로 사용 하고 중지 했을 때 작동 했지만 처음 사용한 후 EADDRINUSE 문제가 발생하기 시작 npm start했으므로 실제 해결책은 Ctrl + C 이외의 것을 사용하여 종료하는 것 같습니다 npm start.
David Mason

귀하의 npm start스크립트는 두 개 이상의 노드 프로그램 또는 백그라운드에서 실행 된 인 노드 프로그램이 될 수도 있고, 프로그램이 해당 포트를 사용하여 자식 프로세스가있을 수 있습니다.
fent

1
종종이 오류는 노드 프로세스가 제트가 종료되지 않았기 때문에 발생합니다. 그러나 때로는 포트가 다른 프로세스에서 사용 중이므로 올바른 프로세스를 이해하고 찾는 것이 어려울 수 있습니다. 아래 WolfReporter는이 문제에 대한 올바른 해결책을 가지고 있습니다! stackoverflow.com/a/22875192/36975
qualbeen

6
나는했고 ps aux | grep node, 프로세스 ID (두 번째 열)를 찾아서 kill <pid>(mine was kill 18762)로 간단히 죽였습니다 .
nik_m

168

운영:

ps -ax | grep node

다음과 같은 내용이 표시됩니다.

60778 ??         0:00.62 /usr/local/bin/node abc.js

다음을 수행하십시오.

kill -9 60778

감사! 내 컴퓨터에서 작동합니다!
olefrank

감사. 이것이 내가 필요한 것이었다. 닫을 때 노드 앱을 자동 시작하는 pm2를 설치했습니다. 노드를 자동 시작하려면 pm2를 비활성화해야했습니다.
KlevisGjN

공장! 고마워요
빔 서재 지킴

9
Windows에서는 어떻게합니까?
William

kill -15 60778SIGTERMaSIGKILL
praj

39

Linux에서 (최소한 Ubuntu 파생 제품)

killall node

이 양식보다 쉽습니다.

ps | grep <something>
kill <somepid>

포트를 보유한 고아가있는 경우에는 둘 다 작동하지 않습니다. 대신 다음을 수행하십시오.

netstat -punta | grep <port>

포트가 보류중인 경우 다음과 같은 내용이 표시됩니다.

tcp           0      0.0.0.0:<port>          0.0.0.*       LISTEN     <pid>/<parent>

이제 pid로 죽여라.

kill -9 <pid>

1
이것은 완전한 답변으로 표시되어야합니다. 제 경우에도 그것은 고아였습니다. 이것이 그들이 좀비 프로세스라고 부르는 것입니까?
Nithish Inpursuit Ofhappiness 2015

1
대신 예상 <pid>/<parent>내가 얻을-
시스코 코랄 모랄레스

35

다음 명령은 실행중인 노드 프로세스 목록을 제공합니다.

ps | grep node

해당 포트를 해제하려면 다음을 사용하여 프로세스를 중지하십시오.

kill <processId>

3
프로세스 | grep -v grep를 제외 하기 위해를 추가 할 수 있습니다 grep.
Garrett Hyde

6
원래 포스터가 썼던 것처럼 "윈도우 7에"... ;-)
GOLO 로덴

4
훨씬 더 나은 대안은pidof node
Itay Grudev 2013

pidofhomebrew를 사용하여 osx에 쉽게 설치되었습니다brew install pidof
electblake 2013

1
노드 응용 프로그램보다 더 많이 실행하는 경우 주소가 다른 응용 프로그램에 바인딩 될 수 있습니다. 시작하려는 포트에 바인딩 된 pid를 검색하는 것이 더 낫지 않을까요? 즉 : Linux의 경우 netstat -lnptu | grep 포트 번호. Windows에 해당하는 것이 무엇인지 확실하지 않습니다.
chrisst

31

EADDRINUSE응용 프로그램에서 사용하려는 포트를 다른 프로세스에서 사용하고 있기 때문에 오류가 발생 합니다. 이 포트를 해제하려면 점유 프로세스를 종료해야합니다.

당신이에 있기 때문에 윈도우 , 명령 프롬프트를 사용하여 프로세스를 종료 할 수 있습니다 ( cmd). 이랑cmd 차단 응용 프로그램의 프로세스 ID (PID)를 찾을 수 있습니다. 프로세스를 종료 / 종료하려면 PID가 필요합니다.

다음은 단계별 가이드입니다 ...

  1. 지정된 포트에서 실행중인 모든 프로세스를 찾습니다 (이 예에서 포트는 "3000").

    netstat -ano | ": 3000"찾기

  2. netstat명령은 지정된 포트에서 실행중인 모든 프로세스를 나열합니다. netstat결과 의 마지막 열 에서 PIDs를 볼 수 있습니다 (이 예에서 PID는 "8308"). PID다음 명령을 실행하여 특정 항목 에 대해 자세히 알아볼 수 있습니다 .

    작업 목록 / fi "pid eq 8308"

  3. 프로세스를 종료하려면 다음 명령을 사용하여 수행 할 수 있습니다 PID(이 예에서 PID는 "8308").

    taskkill / pid 8308 / f

스크린 샷

여기에 이미지 설명 입력


1
확실한 설명.
Joe Healy

19

오류 오류가 발생하면 EADDRINUSE 수신,

다음 셸 명령을 실행 해보십시오.

netstat -a -o | grep 8080
taskkill /F /PID 6204

나는 grep내 서버가 포트 8080에서 실행되고 있다는 것을 알고 있기 때문에 8080을 ed. ( static내가 시작할 때 알려줍니다 : 'serving "."at http://127.0.0.1:8080 '.) 다른 것을 검색해야 할 수도 있습니다. 포트.


1
드디어! 프로세스가 아닌 포트로 검색하는 답변입니다. 포트를 묶을 수있는 것은 노드 만이 아닙니다!
Michael Scheper

어떤 실행 프로세스가 porthog 라는 포트를 잠그고 있는지 감지하는 모듈을 만들었습니다 . 기본적으로 위의 코드를 실행합니다.
Corey

15

서버가 실행 중이라고 가정하십시오. port 3000

lsof -i tcp:3000
    COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
    node    11716 arun   11u  IPv6 159175      0t0  TCP *:3000 (LISTEN)

그 사용 후 kill -9 <pid>

위의 경우 sudo kill -9 11716


12

아래 명령을 사용하여 특정 포트에서 실행중인 프로세스를 종료합니다 (아래이 예에서는 3000).

kill -9 $(lsof -t -i:3000)

7

저에게 도움이 된 한 가지 가능한 해결책은 " http : // localhost : 3000 / "스크립트가 실행중인 브라우저에서 창을 닫는 것 입니다.


네, 여전히 브라우저 창을 열려는 :-) 로컬 호스트 포트가있는 일반적인 잡았다입니다
데이브 Everitt

7

프로세스 ID 확인

sudo lsof -i : 8081

특정 프로세스를 죽이는 것보다

스도 킬 -9 2925

여기에 이미지 설명 입력


6

오류가 발생하면

오류 : EADDRINUSE 듣기

명령 프롬프트를 열고 다음 지침을 입력하십시오.

netstat -a -o | grep 8080
taskkill /F /PID** <*ur Process ID no*>

그 후 전화 간격 인터페이스를 다시 시작하십시오.

어떤 프로세스 ID phonegap이 사용 중인지 알고 싶다면 TASK MANAGER를 열고 열 제목 PID 를보고 PID 번호를 찾으십시오.


내가 작업 관리자 열고 PID 추가하고 그것을이 들으 사망, 그래서 작업에에서 taskkill 가져올 수 없습니다
톰 Stickel을

5

killall -9Patrick이 제안한 앞서 언급 한 노드는 예상대로 작동하고 문제를 해결하지만 이유에 대한 바로이 답변의 편집 부분을 읽고 싶을 수 있습니다.kill -9 최선의 방법이 아닌지 수 있습니다.

또한 모든 활성 프로세스를 맹목적으로 죽이는 대신 단일 프로세스를 대상으로 할 수 있습니다.

이 경우 먼저 해당 포트 (예 : 8888)에서 실행중인 프로세스의 PID (프로세스 ID)를 가져옵니다.

lsof -i tcp:8888

다음과 같은 결과가 반환됩니다.

COMMAND   PID    USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
node     57385   You   11u  IPv6 0xac745b2749fd2be3      0t0  TCP *:ddi-tcp-1

(듣기) 그럼 그냥하세요 (ps-실제로는하지 마세요. 아래를 계속 읽으세요) :

kill -9 57385

4

이것은 Mac에서 작동합니다.

1 단계.

sudo lsof -i tcp:3000 (or whatever port you want to kill)

위의 명령은 현재 포트를 보유하고있는 프로세스 ID를 제공합니다.

2 단계.

Kill -9 <pid>

3

app.js 또는 ur 프로젝트 구성 파일에서 포트를 변경할 수 있습니다.

기본값 ( '포트', 80)

포트 80이 이미 사용 중인지 확인하려면

netstat -antp | grep 80

netstat -antp | grep 노드

노드 프로세스가 이미 실행 중인지 확인하고 싶을 수 있습니다.

ps -ef | grep 노드

이미 실행중인 경우 다음을 사용하여 종료 할 수 있습니다.

killall 노드


1

학습하는 동안 동일한 코드에서 실행되는 동일한 포트 8081에서 수신 대기하는 2 개의 서버를 만들었습니다.

첫 번째 서버 생성 shud가 작동했습니다. EADDRINUSE로 두 번째 서버 생성 실패

node.js 콜백 지연은 작동하지 않거나 두 번째 서버 생성에 예외가 있고 프로그램이 종료 된 이유 일 수 있으므로 첫 번째 서버도 닫힙니다.

2 서버 문제 힌트, 내가 얻은 : 오류 수정 방법 : nodejs를 사용하는 동안 EADDRINUSE 수신?


1

오류 : EADDRINUSE를 듣고 터미널에서 실행되는 Ubuntu netstat -nptl 에서이 문제를 해결 kill -9 {process-number}하고이 명령 후에 노드 프로세스를 종료하고 이제 node server.js 명령을 다시 실행할 수 있습니다.

전의

EADDRINUSE ::: 8080 듣기

netstat -nptl

tcp6 0 0 ::: 9000 ::: * LISTEN 9660 / java
tcp6 0 0 ::: 5800 ::: * LISTEN-
tcp600 ::: 5900 ::: * LISTEN-
tcp60 ::: 8080 :: : * LISTEN 10401 / node
tcp6 0 0 ::: 20080 ::: * LISTEN 9660 / java
tcp600 ::: 80 ::: * LISTEN-
tcp600 ::: 22 ::: * LISTEN-
tcp60 ::: 10137 ::: * 9660 / java 듣기

죽이기 -9 10401


2
사용자가 Windows에 있다고 말했습니다. Windows에서는 netstat다른 매개 변수를받습니다. netstat -a -p tcp -b -v프로세스 이름을 출력합니다.
arboreal84

0

Mac과 Raspberry Pi에 노드 레드가 설치되어 있습니다. 똑같은 문제가 있었고 'killall'을하는 것은 도움이되지 않았습니다. Raspberry Pi를 종료하고 컴퓨터를 다시 시작하면 정상적으로 작동했습니다.


0

두 개의 다른 탭에서 npm start 명령을 실행하려고 시도했을 수 있습니다. 일부 탭에서 이미 실행중인 경우 npm start를 실행할 수 없습니다. 한 번 확인하십시오.


자세한 내용을 입력하십시오.
DeshDeep 싱

0

위의 모든 것을 시도했지만 여전히 루즈 프로세스를 찾을 수없는 사람은 모두 다시 시도하되 명령 앞에 "sudo"를 포함해야합니다.


0

UI가 더 마음에 들면 Windows 작업 관리자에서 Node.js 프로세스를 찾아서 죽이십시오.



0

시작 노드보다 ubantu의 터미널에서 pkill -9 노드로 노드를 종료하십시오.


0

터미널에서 다음 명령을 사용하여 포트를 종료해야합니다.

$ sudo killall -9 nodejs

0

[해결됨]

너무 늦었을지 모르지만 매력적으로 작동하고 있습니다.

pm2설치 해야 합니다.

npm install -g pm2

현재 실행중인 서버 (server.js)를 중지하려면 :

pm2 stop -f server.js

0

활성 PORT- 4000 을 죽이기 위해 package.json 에 아래를 추가하여이 문제를 해결했습니다 (내 경우에는) WSL2 / Linux / Mac에서 실행

"scripts": {
    "dev": "nodemon app.js",
    "predev":"fuser -k 4000/tcp && echo 'Terminated' || echo 'Nothing was running on the PORT'",
  }

출처


-1

노드 서버를 종료하려면 먼저 터미널에서 다음 명령을 실행하십시오.

  1. top
  2. 다른 창을 연 다음 id이전 창에서 서버를 복사하십시오 . PID number -9 kill 이제 노드 서버를 종료하고 앱을 다시 실행하십시오.

-1

netstat -ano | grep "portnumber"해당 프로세스의 포트 번호 / PID를 나열하기 위해 명령 을 사용했습니다 . 그런 다음 사용할 수 있습니다.taskkill -f //pid 111111 하여 프로세스를 종료 있으며 마지막 값은 첫 번째 명령에서 찾은 pid입니다.

내가 가끔 직면하는 한 가지 문제는 프로세스를 종료 한 후에도 노드가 다시 생성되는 것이므로 좋은 오래된 작업 관리자를 사용하여 수동으로 노드 프로세스를 종료해야합니다.


-4

창에서 다음 명령을 실행하십시오.

taskkill /F /PID 1952

1
1952 년은 변수입니다. 죽이는 프로세스는 다른 ID를 가질 수 있습니다.
디자인 : Adrian 의해
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.