정상적으로 node.js 종료
나는 훌륭한 온라인 책 http://nodebeginner.org/를 읽고 간단한 코드를 시도하고 있습니다.
var http = require("http");
function onRequest(request, response) {
response.writeHead(200, {"Content-Type": "text/plain"});
response.write("Hello World");
response.end();
}
http.createServer(onRequest).listen(8888);
이제는 node.js를 우아하게 종료하는 방법을 몰랐습니다 (아직도 모릅니다!) ctrl+z
. 이제 실행할 때마다 node server.js
다음과 같은 오류 메시지가 나타납니다.
node.js:134
throw e; // process.nextTick error, or 'error' event on first tick
^
Error: EADDRINUSE, Address already in use
at Server._doListen (net.js:1100:5)
at net.js:1071:14
at Object.lookup (dns.js:153:45)
at Server.listen (net.js:1065:20)
at Object.<anonymous> (/Users/Bob/server.js:7:4)
at Module._compile (module.js:402:26)
at Object..js (module.js:408:10)
at Module.load (module.js:334:31)
at Function._load (module.js:293:12)
at Array.<anonymous> (module.js:421:10)
따라서 두 가지 질문이 있습니다.
1) node.js를 정상적으로 종료하려면 어떻게해야합니까?
2) 내가 만든 엉망진창을 어떻게 복구합니까?
Ctrl+ C를 사용 하여 노드 프로세스를 정상적으로 종료합니다.
엉망을 정리하려면 플랫폼에 따라 다르지만 기본적으로 노드가 실행 중이던 프로세스의 잔해를 찾아서 죽여야합니다.
예를 들어, Unix :
ps -ax | grep node
는 다음과 같은 항목을 제공합니다.1039 ttys000 0:00.11 node index.js
여기서는
index.js
노드 파일의 이름입니다.이 예에서 1039는 프로세스 ID (사용자는 다를 수 있음)이므로
kill -9 1039
이를 종료하고 포트에 다시 바인딩 할 수 있습니다.
저는 현재 Node의 이벤트 시스템을 사용하여 신호에 응답합니다. 프로그램에서 Ctrl-C (SIGINT) 신호를 사용하는 방법은 다음과 같습니다.
process.on( 'SIGINT', function() {
console.log( "\nGracefully shutting down from SIGINT (Ctrl-C)" );
// some other closing procedures go here
process.exit( );
})
Ctrl-Z가 프로그램을 종료하지 않기 때문에 '사용중인 주소'오류가 발생했습니다. 유닉스와 유사한 운영 체제에서 프로세스를 일시 중단하고 백그라운드에 배치 한 노드 프로그램은 여전히 해당 포트에 바인딩되어 있습니다.
Unix 계열 시스템에서 [Control + Z]는 프로세스를 일시 중단하는 키 시퀀스 (SIGTSTP)에 대한 가장 일반적인 기본 키보드 매핑입니다. [3] 사용자가 컴퓨터 터미널에 입력하면 현재 실행중인 포 그라운드 프로세스에 SIGTSTP 신호가 전송되어 일반적으로 프로세스가 실행을 중지합니다. 사용자는 나중에 'fg'(전경의 약자) 명령을 입력하거나 'bg'(배경의 약자)를 입력하고 'disown'명령을 입력하여 터미널에서 백그라운드 프로세스를 분리하여 프로세스 실행을 계속할 수 있습니다. 1
kill <pid>
또는 'killall -9 node'등 을 수행하여 프로세스를 종료 해야합니다 .
node.js는 이벤트 기반 런타임이므로 가장 우아한 종료는 보류중인 이벤트의 큐를 소진하는 것입니다. 이벤트 큐가 비어 있으면 프로세스가 종료됩니다. 설정된 간격 타이머를 지우고 소켓 연결이 열려있는 서버를 닫는 등의 작업을 수행하여 이벤트 큐가 비워 지는지 확인할 수 있습니다. 타사 모듈을 사용할 때는 모듈 작성자가 생성 한 보류중인 이벤트를 정상적으로 비우기 위해주의를 기울 였는지 여부에 따라 결정되기 때문에 더 까다로워집니다. 이것은 '누수 된'보류중인 이벤트를 추적하는 데 많은 노력을 할 것이기 때문에 node.js 프로세스를 종료하는 가장 실용적인 방법 은 아니지만 가장 우아하다고 생각합니다.
다음 중 하나를 입력하십시오.
process.exit()
또는
.exit
node
정상적으로 종료 합니다.
Hitting Control + C twice will force an exit.
1) How do I shut down node.js gracefully?
Listening for a SIGINT signal. On Windows you need to listen for a ctrl-c with the readline module.
I've written my own solution to provide an application a graceful shutdown and the usage of domains: grace. It's worth to have a look.
참고URL : https://stackoverflow.com/questions/6958780/quitting-node-js-gracefully
'Program Tip' 카테고리의 다른 글
레일 3.2에 파비콘을 추가하는 방법 (0) | 2020.10.20 |
---|---|
Matplotlib 개별 컬러 바 (0) | 2020.10.20 |
Redis : 키의 데이터베이스 크기 / 크기 표시 (0) | 2020.10.20 |
IList 또는 List를 사용하는 이유는 무엇입니까? (0) | 2020.10.20 |
UIView 애니메이션 대 CALayers (0) | 2020.10.19 |