[node.js] Node.js에서 CTRL + C 감지

이 코드는 다른 SO 질문에서 얻었지만 노드가 tty 대신 process.stdin.setRawMode를 사용하도록 불평하여 변경했습니다.

전에:

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하고 오류를 던지고 두 번째는 아무것도하지 않고 Node의 네이티브 CTRL+ C핸들러를 비활성화 하는 완전히 반응하지 않는 노드 프로세스를 만드는 것이므로 노드를 종료하지도 않습니다. 그것을 누르십시오. Windows 에서 Ctrl+ C를 어떻게 성공적으로 처리 할 수 있습니까?



답변

인터럽트 신호를 잡으려는 SIGINT경우 키보드에서 읽을 필요가 없습니다. 의 process객체 nodejs는 인터럽트 이벤트 를 노출합니다.

process.on('SIGINT', function() {
    console.log("Caught interrupt signal");

    if (i_should_exit)
        process.exit();
});

편집 : 해결 방법 없이는 Windows에서 작동하지 않습니다. 여길 봐


답변

기능이 필요한 사람들을 위해 죽음을 찾았 습니다 (npm 결절, 하!) .

저자는 또한 Windows에서 작동 한다고 주장 합니다.

POSIX 호환 시스템에서만 테스트되었습니다. 여기에 Windows 신호에 대한 좋은 토론이 있습니다. 분명히 이것은 수정 / 매핑되었습니다.

CTRL+ Cwin32에서 작동 하는지 확인할 수 있습니다 (예, 놀랐습니다).


답변