node.js의 process.on ( 'SIGINT')에 해당하는 Windows는 무엇입니까?
여기 지침 (SIGINT 이벤트 수신)에 따라 Ctrl-C 또는 서버 종료에 대한 응답으로 Windows-8 호스팅 node.js 애플리케이션을 정상적으로 종료합니다.
그러나 Windows에는 SIGINT
. 나도 시도 process.on('exit')
했지만 생산적인 일을하기에는 늦은 것 같습니다.
Windows에서이 코드는 다음을 제공합니다. 오류 : 해당 모듈 없음
process.on( 'SIGINT', function() {
console.log( "\ngracefully shutting down from SIGINT (Crtl-C)" )
// wish this worked on Windows
process.exit( )
})
Windows에서이 코드는 실행되지만 정상적으로 수행하기에는 너무 늦습니다 .
process.on( 'exit', function() {
console.log( "never see this log message" )
})
거기에 SIGINT
Windows에서 해당 이벤트는?
readline 모듈을 사용하고 SIGINT 이벤트를 수신해야합니다.
http://nodejs.org/api/readline.html#readline_event_sigint
if (process.platform === "win32") {
var rl = require("readline").createInterface({
input: process.stdin,
output: process.stdout
});
rl.on("SIGINT", function () {
process.emit("SIGINT");
});
}
process.on("SIGINT", function () {
//graceful shutdown
process.exit();
});
언제인지 확실하지 않지만 노드 8.x 및 Windows 10에서 원래 질문 코드는 이제 간단히 작동합니다.
Windows 명령 프롬프트에서도 작동합니다.
다른 작업에 대해 "readline"가져 오기가 필요하지 않은 경우 프로그램이 Windows에서 실행되고 있음을 확인한 후 "readline"을 가져 오는 것이 좋습니다. 또한 인식하지 못하는 사용자를 위해 Windows 32 비트 및 Windows 64 비트 시스템 모두에서 작동합니다 (키워드 "win32"를 반환 함). 이 솔루션 Gabriel에 감사드립니다.
if (process.platform === "win32") {
require("readline")
.createInterface({
input: process.stdin,
output: process.stdout
})
.on("SIGINT", function () {
process.emit("SIGINT");
});
}
process.on("SIGINT", function () {
// graceful shutdown
process.exit();
});
현재 Windows 콘솔 제어 이벤트를 캡처하기위한 노드는 아직 지원되지 않으므로 POSIX 신호에 해당하는 항목이 없습니다.
https://github.com/joyent/node/issues/1553
그러나 tty 모듈 문서 는 정상 종료를 시작하기 위해 키 누름을 캡처하는 메커니즘의 예를 제공하지만 이는 ctrl+ 에서만 작동합니다 c.
var tty = require('tty');
process.stdin.resume();
tty.setRawMode(true);
process.stdin.on('keypress', function(char, key) {
if (key && key.ctrl && key.name == 'c') {
console.log('graceful exit of process %d', process.pid);
process.exit();
}
});
요즘에는 Windows를 포함한 모든 플랫폼 에서 작동 합니다 .
다음 코드는 Windows 10에서 기록한 후 제대로 종료됩니다.
process.on('SIGINT', () => {
console.log("Terminating...");
process.exit(0);
});
node.js 0.8 이후 keypress
이벤트는 더 이상 존재하지 않습니다. 그러나 이벤트를 다시 구현하는 keypress 라는 npm 패키지가 있습니다 .
로 설치 한 npm install keypress
후 다음과 같이하십시오.
// Windows doesn't use POSIX signals
if (process.platform === "win32") {
const keypress = require("keypress");
keypress(process.stdin);
process.stdin.resume();
process.stdin.setRawMode(true);
process.stdin.setEncoding("utf8");
process.stdin.on("keypress", function(char, key) {
if (key && key.ctrl && key.name == "c") {
// Behave like a SIGUSR2
process.emit("SIGUSR2");
} else if (key && key.ctrl && key.name == "r") {
// Behave like a SIGHUP
process.emit("SIGHUP");
}
});
}
'Program Tip' 카테고리의 다른 글
egit에서 단일 파일 로컬 커밋되지 않은 변경 실행 취소 (예 : svn revert) (0) | 2020.10.23 |
---|---|
Visual Studio에서 선택한 줄의 들여 쓰기를 수정하는 방법 (0) | 2020.10.23 |
window.onbeforeunload 및 window.onunload가 Firefox, Safari, Opera에서 작동하지 않습니까? (0) | 2020.10.23 |
상위 폴더가없는 경우 파일을 작성하는 방법은 무엇입니까? (0) | 2020.10.23 |
HTTP 및 HTTPS 요청 모두에 대해 서블릿에서 전체 URL 및 쿼리 문자열 가져 오기 (0) | 2020.10.23 |