Node.js에서 CTRL+C 탐지
다른 SO 질문에서 이 코드를 받았는데 노드에서 process.stdin을 사용하라고 불평했습니다.tty 대신 RawMode로 설정해서 변경했습니다.
이전:
var tty = require("tty");
process.openStdin().on("keypress", function(chunk, key) {
if(key && key.name === "c" && key.ctrl) {
console.log("bye bye");
process.exit();
}
});
tty.setRawMode(true);
이후:
process.stdin.setRawMode(true);
process.stdin.on("keypress", function(chunk, key) {
if(key && key.name === "c" && key.ctrl) {
console.log("bye bye");
process.exit();
}
});
어쨌든, 그것은 아무 것도 하지 않는 전혀 응답하지 않는 노드 프로세스를 만드는 것일 뿐이고, 첫 번째는 그것에 대해 불평했습니다.tty, 오류를 던지고, 두 번째는 아무 것도 하지 않고 노드의 C네이티브 + 핸들러를 비활성화하여 눌러도 노드를 종료하지 않습니다.Windows에서 +를 성공적으로 C처리하려면 어떻게 해야 합니까?
인터럽트 신호를 잡으려고 하면SIGINT, 키보드로 읽을 필요는 없어요.process의 목적.nodejs인터럽트 이벤트를 노출합니다.
process.on('SIGINT', function() {
console.log("Caught interrupt signal");
if (i_should_exit)
process.exit();
});
편집: 해결 방법이 없으면 Windows에서 작동하지 않습니다.여기를 보시오
NPM 모듈,death,사용하다SIGINT,SIGQUIT,그리고.SIGTERM.
그래서 기본적으로 당신이 해야 할 일은 다음과 같습니다.
process.on('SIGINT', () => {}); // CTRL+C
process.on('SIGQUIT', () => {}); // Keyboard quit
process.on('SIGTERM', () => {}); // `kill` command
참고로, 이것은 실제로 다음과 같은 것일 수도 있습니다.SIGINT,SIGQUIT,그리고.SIGTERM몇번이고...왜 그런지는 모르겠지만, 나는 그랬습니다.
이렇게 해서 고쳤습니다.
let callAmount = 0;
process.on('SIGINT', function() {
if(callAmount < 1) {
send.success(`✅ The server has been stopped`, 'Shutdown information', 'This shutdown was initiated by CTRL+C.');
setTimeout(() => process.exit(0), 1000);
}
callAmount++;
});
인터럽트 키를 탐지하는 것만 원하신다면SIGINT
편집: 저는 이 게시물이 아주 오래된 것인지 몰랐습니다, 아, 다른 사람들에게 도움이 되는 것 같습니다!
기능이 필요하신 분들은 죽음을 찾았습니다(npm nodule, hah!).
저자는 윈도우에서도 작동한다고 주장합니다.
POSIX 호환 시스템에서만 테스트되었습니다.여기 Windows 신호에 대한 좋은 토론이 있습니다. 이는 수정/매핑된 것으로 보입니다.
win32에서 + 작동하는 것을 C확인할 수 있습니다(네, 놀랍습니다.
process.on('signal', async (signal) => {
console.log('signal: ', signal);
if (signal === 'SIGINT') {
console.log('Received SIGINT. Calling save function...');
await amazon.saveData();
}
process.exit(0);
});
if (event.key == "ctrl+c") {
console.log("goodbye");
break;
}
언급URL : https://stackoverflow.com/questions/20165605/detecting-ctrlc-in-node-js
'programing' 카테고리의 다른 글
| Spring Boot 3으로 업그레이드할 때 wiremock 문제 발생 (0) | 2023.09.07 |
|---|---|
| 입력 상자에 부트스트랩 글리폰 추가 (0) | 2023.09.07 |
| 디브에서 긴 단어를 단어로 묶는 방법이 있습니까? (0) | 2023.09.07 |
| 정렬-객체 및 정수 (0) | 2023.09.07 |
| Ubuntu의 MariaDB - 특정 버전 (0) | 2023.09.02 |