Rilevamento di CTRL + C in Node.js


92

Ho ricevuto questo codice da una domanda SO diversa, ma node si è lamentato di utilizzare process.stdin.setRawMode invece di tty, quindi l'ho cambiato.

Prima:

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

Dopo:

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

In ogni caso, si tratta solo di creare un processo di nodo totalmente non responsivo che non fa nulla, con il primo che si lamenta tty, quindi genera un errore, e il secondo semplicemente non fa nulla e disabilita il gestore nativo di Node CTRL+ C, quindi non esce nemmeno dal nodo quando io premerlo. Come posso gestire con successo Ctrl+ Cin Windows ?

Risposte:


176

Se stai cercando di catturare il segnale di interruzione SIGINT , non è necessario leggere dalla tastiera. L' processoggetto di nodejsespone un evento di interruzione:

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

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

Modifica : non funziona su Windows senza una soluzione alternativa. Vedere qui


3
Tranne che non è così. Almeno non sulle finestre.
user3025492

1
Sembra che sia già stato risolto ... nel 2012. github.com/joyent/node/issues/1553
Mason Wan

11
Per i lettori futuri, tale questione venga risolta per Windows qui: stackoverflow.com/a/14861513/2020425
Griffork

Funziona come una magia. Dovrebbe essere la risposta accettata. Grazie.
Oppure Assayag

6

Per coloro che hanno bisogno della funzionalità, ho trovato la morte (npm nodule, hah!) .

L'autore afferma anche che funziona su Windows:

È stato testato solo su sistemi compatibili POSIX. Ecco una bella discussione sui segnali di Windows, a quanto pare, questo è stato risolto / mappato.

Posso confermare che CTRL+ Cfunziona su win32 (sì, sono sorpreso).

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.