programing

명령줄에서 node.js 프로그램 중지

stoneblock 2023. 5. 29. 09:16

명령줄에서 node.js 프로그램 중지

포트에서 수신하는 단순 TCP 서버가 있습니다.

var net = require("net");

var server = net.createServer(function(socket) {
    socket.end("Hello!\n");
});

server.listen(7777);

는 작은으로 시작합니다.node server.jsMac에서 Ctrl + Z를 눌러 닫습니다.를 사용하여 다시 실행하려고 할 때node server.js다음 오류 메시지가 표시됩니다.

node.js:201
        throw e; // process.nextTick error, or 'error' event on first tick
          ^
Error: listen EADDRINUSE
at errnoException (net.js:670:11)
at Array.0 (net.js:771:26)
at EventEmitter._tickCallback (node.js:192:41)

프로그램을 잘못 닫았나요?어떻게 하면 이런 일이 일어나지 않게 할 수 있습니까?

프로그램을 종료하려면 +를 사용해야 합니다. 그러면 프로그램이 전송됩니다.SIGINT이를 통해 프로그램이 수신 중인 포트에서 바인딩되지 않고 정상적으로 종료됩니다.

참고 항목: https://superuser.com/a/262948/48624

Ctrl일시Z 중단됩니다. 즉, 계속 작동할 수 있습니다.

Ctrl실제로C 죽일 것입니다.

다음과 같이 수동으로 죽일 수도 있습니다.

ps aux | grep node

프로세스 ID를 찾습니다(왼쪽에서 두 번째).

kill -9 PROCESS_ID

이것도 효과가 있을 수 있습니다.

killall node

또는 다음과 같은 모든 작업을 한 줄로 수행할 수 있습니다.

kill -9 $(ps aux | grep '\snode\s' | awk '{print $2}')

'\snode\s' 내부의 노드를 다른 프로세스 이름으로 바꿀 수 있습니다.

프로세스를 다시 시작하고 종료합니다.

Ctrl일시Z 중단됩니다. 즉, 중단된 백그라운드 프로세스로 실행 중입니다.

이제 터미널 프롬프트에 도달할 가능성이 높습니다.

  1. .fg프로세스를 다시 시작할 수 있습니다.

  2. +를 C입력하여 올바르게 종료합니다.


또는 다음과 같이 수동으로 종료할 수 있습니다.

(참고: 다음 명령에는 root가 필요할 수 있습니다.sudo ...당신의 친구입니다)

pkill -9 node

또는 pkill이 없는 경우 다음과 같이 수행할 수 있습니다.

killall node

또는 아마도 이것:

kill $(ps -e | grep node | awk '{print $1}')

때때로 프로세스는 자체 grep를 나열하며, 이 경우 다음이 필요합니다.

kill $(ps -e | grep dmn | awk '{print $2}')

.


h/t @ruffin은 질문 자체에 대한 코멘트입니다.저도 같은 문제가 있었고 그의 의견이 제 스스로 해결하는 데 도움이 되었습니다.

Node.js를 대화형으로 실행하는 경우(REP):

Ctrl > 프롬프트로 다시 이동한 후 다음을 입력합니다C.

process.exit()

또는 +를 사용합니다.

입력할 수 있습니다..exit합니다.

linux try: Linux 파일:pkill node

창:

Taskkill /IM node.exe /F

또는

from subprocess import call

call(['taskkill', '/IM', 'node.exe', '/F'])

$ sudo killall node다른 터미널에서 에서 작동하는 반면,killall node않음: 작하지않:

$ killall node
No matching processes belonging to you were found

다음 명령을 사용하여 로컬 서버 kill(여기서는 8000)에 특정할 수 있습니다.

http://localhost:8000/ PID 제거(프로세스)ID):

$:lsof -i tcp:8000

다음과 같은 TCP 그룹이 제공됩니다.

명령 PID 사용자 FD 유형 장치 크기/끄기 노드 이름

노드 21521 ubuntu 12u IPv6 3456680t0 TCP *:8000(LISTEN

$:kill -9 21521

TCP*:8000에 해당하는 processId를 종료합니다.

퓨저를 사용하여 원하는 작업을 수행할 수 있습니다.

포트에서 실행 중인 태스크의 프로세스 ID를 가져오려면 다음 작업을 수행합니다.

fuser <<target_port>>/tcp

포트가 8888이라고 가정하고 명령어는 다음과 같습니다.

fuser 8888/tcp

포트에서 실행 중인 프로세스를 종료하려면 add -k 스위치를 사용합니다.

fuser <<target_port>>/tcp -k

예(포트는 8888):

fuser 8888/tcp -k

바로 그거야!포트에서 수신 중인 프로세스가 닫힙니다.보통 서버 응용프로그램을 실행하기 전에 이 작업을 수행합니다.

MacOS의 경우

  1. 터미널 열기
  2. 아래 코드를 실행하고 Enter 키를 누릅니다.

     sudo kill $(sudo lsof -t -i:4200)
    

늦은 답변이지만 NodeJS 문서에서 다음과 같은 내용을 발견했습니다.

때 REP가 종료될 때 '종료'합니다. REP는 REP를 합니다..exit할 때 는 명을입으, 사가누름을 .<ctrl>-C 번 신호를 SIGINT를 눌러 신호를 .<ctrl>-D입력 스트림에서 '종료' 신호를 보냅니다.수신기 콜백이 인수 없이 호출됩니다.

요약하면 다음과 같이 종료할 수 있습니다.

  1. 자치 기타를 합니다..exitREPL.nodejs REPL 파일입니다.
  2. 누기르를 <ctrl>-C두번이라.
  3. <ctrl>-D.
  4. process.exit(0)REPL12의 합니다.다른 상태를 반환하려면 0이 아닌 숫자를 반환할 수 있습니다.
  5. process.kill(process.pid)코드 내에서 또는 REPL에서 nodejsapi를 사용하여 죽이는 방법입니다.

npm stop아니면 이런 것들.는 다음과 같이 할 수 .

require('child_process').exec(`kill -9 ${pid}`)

자세한 내용은 다음 링크를 참조하십시오. https://gist.github.com/dominhhai/aa7f3314ad27e2c50fd5

이 답변을 추가하는 이유는 프로덕션 구현이 포함된 많은 프로젝트의 경우 이러한 프로세스를 중지하는 스크립트가 있으므로 필요하지 않기 때문입니다.

좋은 은 를 사용하는 입니다.forever패키에지(서에))NPM).

예:

영구 설치

npm install forever -g

노드 서버 실행

forever start -al ./logs/forever.log -ao ./logs/out.log -ae ./logs/err.log server.js

결과:

info: Forever processing file: server.js

노드 서버 종료

forever stop server.js

결과

info: Forever stopped process: uid command script forever pid id logfile uptime [0] sBSj "/usr/bin/nodejs/node" ~/path/to/your/project/server.js 23084 13176 ~/.forever/forever.log 0:0:0:0.247

서버 응용프로그램을 완전히 종료합니다.

여러 노드 서버가 실행 중인 문제가 발생했습니다. 그 중 하나를 삭제하고 스크립트에서 다시 배포하려고 합니다.

참고: 이 예는 Mac의 bash 셸에 있습니다.

그렇게 하기 위해 나는 반드시 나의node가능한 한 구체적으로 호출합니다.예를 들어 전화하기보다는node server.js앱 디렉토리에서, 나는 전화합니다.node app_name_1/app/server.js

그러면 다음을 사용하여 죽일 수 있습니다.

kill -9 $(ps aux | grep 'node\ app_name_1/app/server.js' | awk '{print $2}')

이렇게 하면 app_name_1/app/server.js를 실행하는 노드 프로세스만 종료됩니다.

도망쳤다면,node app_name_2/app/server.js이 노드 프로세스는 계속 실행됩니다.

만약 당신이 그들을 죽이고 싶다면 당신이 사용할 수 있는 모든 것을.killall node남들이 말한 바와 같이

답변이 늦었지만 창에서 Ctrl+Alt+DEL로 작업 관리자를 연 다음 Node.js 프로세스를 종료하면 이 오류가 해결됩니다.

사용 사례: MacOS에서 스크립트와 다른 포트에서 여러 노드 서버 실행/재실행

실행:"cd $PATH1 && node server1.js & cd $PATH2 && node server2.js & ..."

중지 1:"kill -9 $(lsof -nP -i4TCP:$PORT1 | grep LISTEN | awk '{print $2}')"

2번, 3번...

다시 실행:"stop1 & stop2 & ... & stopN ; run

포트에서 프로세스를 찾는 방법에 대한 자세한 내용은 다음을 참조하십시오.Mac OS X에서 지정된 TCP 포트를 수신하는 사용자는 누구입니까?

Windows의 경우 먼저 포트 번호로 PID를 검색합니다.

netstat -ano | findStr "portNumber"

그런 다음 작업을 종료하고 "c" 드라이브의 루트에 있는지 확인합니다. 그러면 명령어는taskkill /F /PID your pid

VS Code 및 terminal을 사용하는 경우 먼저 오른쪽 드롭다운에서 node를 선택한 다음 Ctrl + C를 수행합니다.그러면 될 것입니다.

여기에 이미지 설명 입력

메시지가 표시되면 y를 누릅니다.

여기에 이미지 설명 입력

감사해요.

언급URL : https://stackoverflow.com/questions/10522532/stop-node-js-program-from-command-line