[node.js] 노드 / 익스프레스 : EADDRINUSE, 이미 사용중인 주소-서버 종료

connect를 사용하여 node.js에서 간단한 서버를 실행하고 있습니다.

var server = require('connect').createServer();
//actions...
server.listen(3000);

내 코드에는 실제 처리기가 있지만 기본 아이디어입니다. 내가 계속 얻는 문제는

EADDRINUSE, Address already in use

이전에 충돌이 발생한 후 응용 프로그램을 다시 실행할 때이 오류가 발생합니다. 터미널의 새 인스턴스를 열지 않기 때문에로 프로세스를 닫습니다 ctr + z.

서버 또는 연결을 닫는 것만으로도 확실합니다. 나는 운없이 전화 server.close()를 시도했다 process.on('exit', ...);.



답변

process.on('exit', ..)프로세스가 충돌하거나 종료되면 호출되지 않습니다. 이벤트 루프가 끝날 때만 호출되며, server.close() 일종의 이벤트 루프 종료되므로 (현재 실행중인 스택을 기다려야 함) exit 이벤트 안에 넣는 것은 의미가 없습니다 …

충돌시, 수행 process.on('uncaughtException', ..)및 종료process.on('SIGTERM', ..)

즉, SIGTERM (기본 종료 신호)은 앱을 정리하는 반면 SIGKILL (즉시 종료)은 앱이 아무것도하지 못하게합니다.


답변

명령 행 경로로 이동할 수도 있습니다.

ps aux | grep node

프로세스 ID를 가져옵니다.

그때:

kill -9 PID

강제 종료시 -9를 수행하면 SIGKILL (SIGTERM 대신)이 전송됩니다. 때때로 SIGTERM이 노드에 의해 무시되었습니다.


답변

먼저, 어떤 프로세스가 사용 중인지 알고 싶을 것입니다 port 3000

sudo lsof -i :3000

여기 에는이 포트에서 수신되는 모든 PID 가 나열됩니다 . PID가 있으면 다음을 사용하여 종료 할 수 있습니다.

kill -9 {PID}


답변

win8을 실행하는 랩톱 에서이 문제를 해결했습니다. 이것은 효과가 있었다.

cmd.exe를 ‘관리자’로 실행하십시오.

C:\Windows\System32>taskkill /F /IM node.exe
SUCCESS: The process "node.exe" with PID 11008 has been terminated.


답변

아래 명령으로 포트 3000에서 실행중인 프로세스의 PID 즉 ID를 확인하십시오.

lsof -i tcp:3000

다음과 같이 출력됩니다.

COMMAND  PID   USER   FD   TYPE  DEVICE  SIZE/OFF NODE NAME
node     5805  xyz    12u  IPv6  63135    0t0     TCP  *:3000 (LISTEN)

이제 다음을 사용하여 프로세스를 종료하십시오.

kill -9 5805


답변

이 솔루션을 찾았습니다. 사용 권한을 부여하십시오. sudo

  sudo pkill node


답변

리눅스

ps노드 프로세스의 PID를 실행 하고 결정하십시오.

그런 다음 실행 sudo kill PID

윈도우

tasklist를 사용하여 실행중인 프로세스 목록을 표시하십시오.

tasklist /O

그런 다음 tasklist명령 에서 얻은 PID를 사용하여 노드 프로세스를 종료하십시오 .

taskkill /pid PID