2013-11-23 9 views
40

Ich habe diesen Code aus einer anderen SO-Frage, aber Knoten beschwert, um process.stdin.setRawMode anstelle von tty zu verwenden, so änderte ich es.Ermitteln von STRG + C in Node.js

Vorher:

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

Nach:

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

Auf jeden Fall, es ist nur ein völlig nonresponsive Knoten Prozess zu schaffen, die nichts tut, mit dem ersten über tty beschweren, dann einen Fehler zu werfen, und der zweite tut einfach nichts und deaktiviert Node's nativen Handler, so dass es Knoten nicht einmal beendet, wenn ich es drücke. Wie kann ich erfolgreich umgehen Ctrl + C in Windows?

Antwort

85

Wenn Sie versuchen, das Interrupt-Signal abzufangen, müssen Sie nicht über die Tastatur lesen. Das process Objekt von nodejs setzt ein Interrupt-Ereignis:

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

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

bearbeiten: ohne eine Abhilfe nicht unter Windows funktioniert. See here

+2

Außer dass es nicht. Am besten nicht an Fenstern. – user3025492

+1

Sie haben Recht. Bearbeitet. – slezica

+1

Es scheint, dass es bereits ... im Jahr 2012 behoben ist. https://github.com/joyent/node/issues/1553 –

3

Für diejenigen, die die Funktionalität benötigen, fand ich death (npm nodule, hah!).

Autor auch Ansprüche es auf windows funktioniert:

Es ist nur auf POSIX-kompatibelen Systemen getestet. Hier ist eine nette Diskussion über Windows-Signale, anscheinend wurde dies behoben/gemappt.

kann ich bestätigen CTRL +C auf win32 funktioniert (ja, ich bin überrascht).

+0

** Update **: Tod funktioniert nur manchmal. Andere Knotenpakete sind nicht besser. Korrekte Lösung ist etwas wie [dies] (http://stackoverflow.com/questions/10021373/what-is-the-windows-equivalent-of-process-onsigint-in-node-jshttp://stackoverflow.com/questions/10021373/what-is-the-windows-äquivalent-von-process-onsigint-in-node-js). Jetzt funktioniert es. – honzajde