Node.js'de CTRL + C algılama


92

Bu kodu farklı bir SO sorusundan aldım, ancak düğüm tty yerine process.stdin.setRawMode'u kullanmaktan şikayet etti, bu yüzden onu değiştirdim.

Önce:

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

Sonra:

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

Her durumda, sadece hiçbir şey yapmayan, tamamen yanıt vermeyen bir düğüm süreci yaratıyor, ilk şikayet ediyor tty, sonra bir hata atıyor ve ikincisi hiçbir şey yapmıyor ve Node'un yerel CTRL+ Cişleyicisini devre dışı bırakıyor , bu yüzden ben düğümden çıkmıyor bile. bas. Windows'taCtrl + C' yı nasıl başarılı bir şekilde kullanabilirim ?

Yanıtlar:


176

Kesme sinyalini yakalamaya çalışıyorsanız SIGINTklavyeden okumanıza gerek yoktur. processAmacı, nodejsortaya bir kesme olayı:

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

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

Düzenleme : Windows'ta geçici çözüm olmadan çalışmaz. Buraya bakın


3
Olmaması dışında. En azından pencerelerde değil.
user3025492

1
Görünüşe göre zaten düzeltildi ... 2012'de. Github.com/joyent/node/issues/1553
Mason Wan

11
Gelecekteki okuyucular için, bu soru Windows için burada yanıtlanmaktadır: stackoverflow.com/a/14861513/2020425
Griffork

Sihir gibi çalışır. Kabul edilen cevap olmalı. Teşekkürler.
Veya Assayag

6

İşlevselliğe ihtiyaç duyanlar için ölüm buldum (npm nodülü, hah!) .

Yazar ayrıca pencerelerde çalıştığını iddia ediyor :

Yalnızca POSIX uyumlu sistemlerde test edilmiştir. İşte Windows sinyalleri hakkında güzel bir tartışma, görünüşe göre bu düzeltildi / haritası çıkarıldı.

Win32 üzerinde CTRL+ Cçalıştığını onaylayabilirim (evet, şaşırdım).

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.