명령줄에서 node.js 프로그램 중지
포트에서 수신하는 단순 TCP 서버가 있습니다.
var net = require("net");
var server = net.createServer(function(socket) {
socket.end("Hello!\n");
});
server.listen(7777);
는 작은으로 시작합니다.node server.js
Mac에서 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 중단됩니다. 즉, 중단된 백그라운드 프로세스로 실행 중입니다.
이제 터미널 프롬프트에 도달할 가능성이 높습니다.
.
fg
프로세스를 다시 시작할 수 있습니다.+를 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의 경우
- 터미널 열기
아래 코드를 실행하고 Enter 키를 누릅니다.
sudo kill $(sudo lsof -t -i:4200)
늦은 답변이지만 NodeJS 문서에서 다음과 같은 내용을 발견했습니다.
때 REP가 종료될 때 '종료'합니다. REP는 REP를 합니다.
.exit
할 때 는 명을입으, 사가누름을 .<ctrl>-C
번 신호를 SIGINT를 눌러 신호를 .<ctrl>-D
입력 스트림에서 '종료' 신호를 보냅니다.수신기 콜백이 인수 없이 호출됩니다.
요약하면 다음과 같이 종료할 수 있습니다.
- 자치 기타를 합니다.
.exit
REPL.nodejs REPL 파일입니다. - 누기르를
<ctrl>-C
두번이라. <ctrl>-D
.process.exit(0)
REPL12의 합니다.다른 상태를 반환하려면 0이 아닌 숫자를 반환할 수 있습니다.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
'programing' 카테고리의 다른 글
postgresql에서 db에 대한 사용자를 생성하는 방법은 무엇입니까? (0) | 2023.05.29 |
---|---|
Xcode 운동장이 '달리는 운동장' 또는 '시뮬레이터 실행'에 걸려 코드가 실행되지 않습니다. 어떻게 해야 합니까? (0) | 2023.05.29 |
경고:잘못된 배포 -ip(c:\python39\lib\site-packages)을 무시하고 이 문제를 해결하는 방법과 의미는 무엇입니까? (0) | 2023.05.29 |
.pdb 파일을 생성하는 릴리스입니다. 이유는 무엇입니까? (0) | 2023.05.29 |
인덱스별 목록 항목 가져오기 (0) | 2023.05.29 |