node.js 서버의 모든 인스턴스를 중지


186

Node.js로 작업하는 것은 이번이 처음이며이 문제가 발생했습니다.

IDE의 플러그인을 통해 노드 서버를 시작했습니다. 불행히도 IDE의 터미널을 사용할 수 없습니다. 그래서 명령 줄에서 스크립트를 실행하려고했습니다.

이것은 문제입니다. Express 모듈을 사용하고 있으며 앱이 일부 포트 (8080)를 수신하고 있습니다. 명령 줄에서 앱을 시작하면이 오류가 발생합니다.

events.js:71
    throw arguments[1]; // Unhandled 'error' event
                   ^
Error: listen EADDRINUSE
    at errnoException (net.js:770:11)
    at HTTPServer.Server._listen2 (net.js:910:14)
    at listen (net.js:937:10)
    at HTTPServer.Server.listen (net.js:986:5)
    at Object.<anonymous> (C:\xampp\htdocs\node\chat\app.js:5:5)
    at Module._compile (module.js:449:26)
    at Object.Module._extensions..js (module.js:467:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)
    at Module.runMain (module.js:492:10)

이 오류가 무엇인지 잘 모르겠지만 앱이 이미 사용중인 포트에서 수신 대기 중이기 때문이라고 생각합니다. 그래서 나는했다 :

netstat -an

볼 수있다

TCP    0.0.0.0:8080           0.0.0.0:0              LISTENING

IDE에서 시작하려고 할 때 노드 서버가 이미 시작 되었기 때문입니다.

모든 서버 인스턴스를 중지하려면 어떻게해야합니까? 또한 포트에서 실행중인 것을 감지하고 죽이는 방법을 알려주십시오.


1
죄송합니다. Windows 환경에 있다고 언급하지 않았습니다. 관련 명령을 게시하십시오. 감사합니다
Kiran

또한 Windows 작업 관리자에서 node.js 작업을 찾을 수 있습니다. 이름은 Node.js를이다 진행 찾을 : 서버 측을 ... 그리고 그것의 세부 정보를 엽니 다, 당신은 진행 pid를하고 nodejs의 세부 발견 할 것이다
수영구 란

이것은 나를 위해 일한 것입니다 : superuser.com/questions/1183057/…
알 수 없음

답변:


422

윈도우 머신 :

Node.js 서버를 종료해야하며 실행중인 다른 노드 프로세스가없는 경우라는 이름의 모든 프로세스를 종료하도록 시스템에 지시 할 수 있습니다 node.exe. 다음과 같이 보일 것입니다.

taskkill /im node.exe

프로세스가 계속 지속되면 /f플래그 를 추가하여 프로세스를 강제 종료 할 수 있습니다 .

taskkill /f /im node.exe

보다 세밀한 제어가 필요하고 특정 포트에서 실행중인 서버 만 종료해야하는 netstat경우 프로세스 ID를 찾은 후 종료 신호를 보낼 수 있습니다. 따라서 포트가 8080인 경우 다음을 실행할 수 있습니다.

C:\>netstat -ano | find "LISTENING" | find "8080"

출력의 다섯 번째 열은 프로세스 ID입니다.

  TCP    0.0.0.0:8080           0.0.0.0:0              LISTENING       14828
  TCP    [::]:8080              [::]:0                 LISTENING       14828

그런 다음로 프로세스를 종료 할 수 taskkill /pid 14828있습니다. 프로세스가 종료를 거부 /f하면 명령에 (force) 매개 변수를 추가하십시오 .


리눅스 머신 :

과정은 거의 동일합니다. 머신에서 실행중인 모든 노드 프로세스를 종료 할 수 있습니다 ( 충분하지 않은 -$SIGNAL경우 사용 SIGKILL).

killall node

또는을 사용 netstat하면 포트에서 수신 대기하는 프로세스의 PID를 찾을 수 있습니다.

$ netstat -nlp | grep :8080
tcp        0      0 0.0.0.0:8080         0.0.0.0:*                   LISTEN      1073/node

이 경우 프로세스 ID는 여섯 번째 열의 프로세스 이름 앞에있는 번호이며,이 번호는 다음 kill명령으로 전달됩니다 .

$ kill 1073

프로세스가 종료를 거부하면 -9플래그를 사용하십시오 . 이는 a SIGTERM이며 무시할 수 없습니다.

$ kill -9 1073

1
죄송합니다.이 명령을 정확히 어떻게 사용할 수 있습니까? process.exit ()가 코드에 있습니까? 그러나 서버가 이미 시작되었습니다. node-dev app.js가 아닌 command node app.js로 시작되었을 가능성이 있습니다. "node killall"이 작동하지 않습니다. 내가 잘못하고 있습니까? 주셔서 감사합니다
키란 Ambati에게

1
process.exit()애플리케이션에서 NodeJS 인스턴스가 닫힙니다. killall nodebash에서 시스템에서 실행중인 모든 NodeJS 인스턴스를 종료합니다.
hexacyanide

감사합니다 @hexacyanide. 나는 창문에서 개발 중이다. 명령 행에서 killall 노드를 사용할 수 없기 때문에 killall 노드를 유효하지 않은 명령으로 만듭니다.
Kiran Ambati

3
시도하십시오 taskkill /IM node.exe. 이름이 지정된 모든 프로세스를 종료 node.exe합니다.
hexacyanide

1
taskkill / F / IM node.exe를 사용해야 작동했습니다. 감사합니다!
루이스

75

가장 빠른 방법은

killall node

Linux, OS X에서 작동


쉬운 방법이지만 다른 응용 프로그램이 실행 중이면 더 구체적이어야합니다.
Rajeev Uppala

나를 위해 작동하지 않습니다. node: no process found또한 특정 포트에서 실행되는 노드 프로세스를 grep하면 프로세스 ID가 -숫자 대신 사용됩니다.
Giorgi Gvimradze '

49

lsof필요한 포트에 바인딩 된 프로세스를 사용할 수 있습니다 .

불행히도 플래그는 시스템에 따라 다르지만 Mac OS X에서는 실행할 수 있습니다

lsof -Pi | grep LISTEN

예를 들어 내 컴퓨터에서 다음과 같은 것을 얻습니다.

mongod     8662 jacob    6u  IPv4 0x17ceae4e0970fbe9      0t0  TCP localhost:27017 (LISTEN)
mongod     8662 jacob    7u  IPv4 0x17ceae4e0f9c24b1      0t0  TCP localhost:28017 (LISTEN)
memcached  8680 jacob   17u  IPv4 0x17ceae4e0971f7d1      0t0  TCP *:11211 (LISTEN)
memcached  8680 jacob   18u  IPv6 0x17ceae4e0bdf6479      0t0  TCP *:11211 (LISTEN)
mysqld     9394 jacob   10u  IPv4 0x17ceae4e080c4001      0t0  TCP *:3306 (LISTEN)
redis-ser 75429 jacob    4u  IPv4 0x17ceae4e1ba8ea59      0t0  TCP localhost:6379 (LISTEN)

두 번째 숫자는 PID이며, 듣고있는 포트는 "(LISTEN)"바로 앞에 있습니다. 불량 PID를 찾고 kill -9 $PID극단적 인 편견으로 종료하십시오.


안녕하세요 Jacob, Windows에서 개발 중이므로 답변을 편집하고 Windows 버전을 추가 할 수 있습니까? 감사합니다
Kiran Ambati

Windows에서 어떻게해야할지 모르겠습니다. 죄송합니다. Kiran.
Jacob Groundwater

다른 포트에서 여러 노드 서버가 실행중인 경우 특히 유용합니다. 각 포트에서 실행중인 프로세스 ID를 쉽게 구별 할 수 있습니다.
modulitos 2016 년

25

Windows 및 GitBash 터미널 Windows / Webstorm / GitBash 터미널에서이 명령을 사용해야했습니다.

cmd "/C TASKKILL /IM node.exe /F"

3
이것은 나를 위해 그것을했다. 감사합니다
Adim Victor

1
이것도 나를 위해 그것을했다. Windows에서 모든 노드 프로세스를 종료하는 가장 빠른 방법을 찾았습니다.
Asad

17

특정 노드 프로세스를 종료하려면 명령 행 경로로 이동하여 다음을 입력하십시오.

ps aux | grep node

모든 노드 프로세스 ID 목록을 가져옵니다. 이제 프로세스 ID (pid)를 얻을 수 있습니다 :

kill -9 PID

모든 노드 프로세스를 종료하려면 다음을 수행하십시오.

killall -9 node

-9 스위치는 Windows의 최종 작업과 같습니다. 프로세스가 강제 종료됩니다. 넌 할 수있어:

kill -l

kill 명령의 모든 스위치와 해당 설명을 봅니다.


8

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

taskkill /IM node.exe -F

7

리눅스

친구들에게 감동을주기 위해

ps aux | grep -i node | awk '{print $2}' | xargs  kill -9

그러나 이것은 당신이 기억할 것입니다

killall node


2

Windows를 사용하는 경우 다음을 수행하십시오.

  1. 작업 관리자를 열고이 프로세스를 찾으십시오. 노드 프로세스를 보여주는 작업 관리자-Node.js 서버 측 JavaScript

  2. 그런 다음 마우스 오른쪽 버튼을 클릭하고 "작업 끝내기"를 클릭하십시오.

  3. 이제 모든 npm 명령이 시작부터 실행됩니다.


1

멀티 플랫폼, 안정적이고 최상의 솔루션 :

fkill 을 사용 하여 포트를 가져 오는 프로세스를 종료하십시오.

fkill -f :8080

fkill use 명령을 설치하려면 다음을 수행하십시오. npm i -g fkill


1

당신은 시도 할 수 있습니다

killall node

당신은 또한 시도 할 수 있습니다

killall nodejs

이 명령은 이미 여러 번 게시되었습니다. 다시 게시해도 괜찮지 만, 적어도 다른 사람들이 배울 수 있도록 답변에 추가 설명을 추가해야합니다.
Nico Haase


0

Windows 운영 체제를 사용 중입니다.

모든 노드 프로세스를 종료하고 작동했던 앱을 다시 시작했습니다.

시험

taskkill /im node.exe

0

배치 파일에서 노드 서버를 종료하고 다시 시작하려면 다음 명령을 사용하십시오.

    @echo off
cd "D:\sam\Projects\Node"
taskkill /IM node.exe -F
start /min cmd /C "node index.js"
goto :EOF


-3

cmd 또는 bash에서 누르십시오 : Ctrl + C


이것은 노드 프로세스가 실행중인 터미널보기에서만 작동하며 프로세스 종료를 보장하지는 않습니다.
디자인 : Adrian
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.