Node.js में CTRL + C का पता लगाना


87

मुझे यह कोड एक अलग SO प्रश्न से मिला, लेकिन नोड ने tty के बजाय process.stdin.setRawMode का उपयोग करने की शिकायत की, इसलिए मैंने इसे बदल दिया।

इससे पहले:

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

उपरांत:

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

किसी भी मामले में, यह सिर्फ एक पूरी तरह से गैर-जिम्मेदार नोड प्रक्रिया बना रहा है, जिसमें कुछ भी नहीं है, पहले शिकायत के बारे में tty, फिर एक त्रुटि फेंकना, और दूसरा सिर्फ कुछ भी नहीं कर रहा है और नोड के मूल CTRL+ Cहैंडलर को अक्षम कर रहा है , इसलिए यह नोड को भी नहीं छोड़ता है: इसे दबाओ। मैं Windows में Ctrl+ Cको सफलतापूर्वक कैसे संभाल सकता हूं ?

जवाबों:


168

यदि आप इंटरप्ट सिग्नल को पकड़ने की कोशिश कर रहे हैं SIGINT, तो आपको कीबोर्ड से पढ़ने की आवश्यकता नहीं है। processकी वस्तु nodejsउजागर व्यवधान घटना:

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

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

संपादित करें : विंडोज पर वर्कअराउंड के बिना काम नहीं करता है। यहाँ देखें


3
सिवाय इसके कि यह नहीं है। खिड़कियों पर कम से कम नहीं।
user3025492

1
ऐसा लगता है कि यह पहले से ही तय है ... 2012 में। github.com/joyent/node/issues/1553
मेसन वान

11
भविष्य के पाठकों के लिए, इस सवाल का जवाब यहां दी गई खिड़कियों में दिया गया है: stackoverflow.com/a/14861513/2020425
ग्रिफॉर्क

6

उन लोगों के लिए जिन्हें कार्यक्षमता की आवश्यकता है, मुझे मृत्यु (एनपीएम नोड्यूल, हाह!) मिली ।

लेखक यह भी दावा करता है कि यह खिड़कियों पर काम करता है:

यह केवल POSIX संगत सिस्टम पर परीक्षण किया गया है। यहाँ विंडोज संकेतों पर एक अच्छी चर्चा है, जाहिर है, यह तय / मैप किया गया है।

मैं win32 पर CTRL+ Cकार्यों की पुष्टि कर सकता हूं (हां, मुझे आश्चर्य है)।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.