programing

Node.js에서 CTRL+C 탐지

newnotes 2023. 9. 7. 22:00
반응형

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

반응형