Node.js에서 CTRL + C 감지


87

이 코드는 다른 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를 어떻게 성공적으로 처리 할 수 있습니까?

답변:


168

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

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

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

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


3
그렇지 않다는 것을 제외하고. 한가로이 창문이 아닙니다.
user3025492 2013

1
2012 년에 이미 수정 된 것 같습니다. github.com/joyent/node/issues/1553
Mason Wan

11
미래의 독자를 위해이 질문에 대한 답변은 여기에 있습니다. stackoverflow.com/a/14861513/2020425
Griffork

6

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

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

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

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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.