2013-11-23 17 views
40

mam ten kod z innego SO pytanie, ale węzeł skarżył używać process.stdin.setRawMode zamiast tty, więc zmieniłem go.Wykrywanie CTRL + C w node.js

Przed:

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); 

Po:

process.stdin.setRawMode(true); 
process.stdin.on("keypress", function(chunk, key) { 
    if(key && key.name === "c" && key.ctrl) { 
    console.log("bye bye"); 
    process.exit(); 
    } 
}); 

W każdym razie, to tylko stworzenie zupełnie nieodpowiadającego proces węzła, który nic nie robi, z pierwszym narzekają tty, a następnie rzuca błąd, a drugi po prostu nic nie robić i wyłączanie węzła rodzimy CTRL + C obsługi, więc nie ma nawet rzucić węzeł po naciśnięciu go. W jaki sposób można skutecznie obsługiwać Ctrl + C w systemu Windows?

Odpowiedz

85

Jeśli próbujesz złapać sygnał przerwania SIGINT, nie trzeba czytać z klawiatury. process przedmiotem nodejs naraża przerwania imprezy:

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

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

Edit: nie działa na Windows bez obejścia. See here

+2

Tyle tylko, że tak nie jest. Na laest nie w oknach. – user3025492

+1

Masz rację. Edytowane. – slezica

+1

Wygląda na to, że został już naprawiony ... w 2012 roku. https://github.com/joyent/node/issues/1553 –

3

Dla tych, którzy potrzebują funkcjonalności, znalazłem death (npm nodule, hah!).

Autor także roszczenia to działa na Windows:

To tylko został przetestowany na systemach zgodnych z POSIX. Oto miła dyskusja na temat sygnałów Windowsa, najwyraźniej została ona naprawiona/zmapowana.

mogę potwierdzić CTRL + C działa na win32 (tak, jestem zaskoczony).

+0

** update **: śmierć działa tylko czasami. Inne pakiety węzłów nie są lepsze. Prawidłowe rozwiązanie to coś takiego [this] (http://stackoverflow.com/questions/10021373/what-is-the-windows-equivalent-of-process-onsigint-in-node-jshttp://stackoverflow.com/questions/10021373/what-is-the-windows-equivalent-of-process-onsigint-in-node-js). Teraz działa. – honzajde