J'ai obtenu ce code d'une autre question SO, mais le noeud s'est plaint d'utiliser process.stdin.setRawMode au lieu de tty, je l'ai donc changé.
Avant:
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);
Après:
process.stdin.setRawMode(true);
process.stdin.on("keypress", function(chunk, key) {
if(key && key.name === "c" && key.ctrl) {
console.log("bye bye");
process.exit();
}
});
Dans tous les cas, il s'agit simplement de créer un processus de noeud totalement non-réactif qui ne fait rien. Le premier se plaint de tty
, puis génère une erreur, le second ne fait rien et désactive le natif de Node. CTRL+C gestionnaire, de sorte qu'il ne quitte même pas le noeud lorsque j'appuie dessus. Comment puis-je gérer avec succès Ctrl+C dans Windows?
Si vous essayez de capturer le signal d'interruption SIGINT
, vous n'avez pas besoin de lire à partir du clavier. L'objet process
de nodejs
expose un événement d'interruption:
process.on('SIGINT', function() {
console.log("Caught interrupt signal");
if (i_should_exit)
process.exit();
});
Edit : ne fonctionne pas sous Windows sans solution de contournement. voir ici
Pour ceux qui ont besoin de la fonctionnalité, j'ai trouvé mort (npm nodule, ah!) .
Auteur également revendications cela fonctionne sur windows:
Il n'a été testé que sur des systèmes compatibles POSIX. Voici une bonne discussion sur les signaux Windows, apparemment, cela a été corrigé/mappé.
Je peux confirmer CTRL+C fonctionne sur win32 (oui, je suis surpris).