CTRL + C दबाने पर कमांड को रोकने से रोकें


28

इसलिए, मैं कुछ Zork 1 खेल रहा था और मैं अपने एक दोस्त को दिखाने के लिए कुछ पाठ की प्रतिलिपि बनाने के लिए गया था, लेकिन मैं गलती से CTRL+ दबाने पर शिफ्ट कुंजी को पकड़ना भूल गया C। इससे कमांड बंद हो गई और मैंने अपना Zork डेटा खो दिया ...

क्या कुछ "सहायक" टिप है जो मैं कुंजी को दबाने से रोकने के लिए उपयोग कर सकता हूं CTRL+ C?

ध्यान दें कि ज़ोर्क को टर्मिनल के अंदर चलाया जाता है। यह एक टर्मिनल-आधारित गेम है जिसमें आप विभिन्न कार्यों को करने के लिए कमांड देते हैं।


तो आप सभी अनुप्रयोगों को पूरी तरह से रोकने के लिए Ctrl + c चाहते हैं? यह भविष्य में विनाशकारी हो सकता है।
जॉबिन

जवाबों:


30

मुख्य संयोजन Ctrl+ Cचरित्र भेजता है ^C(बाइट मान 3)। यह टर्मिनल को अग्रभूमि में चल रहे प्रोग्राम में SIGINT सिग्नल भेजने का कारण बनता है। इस सिग्नल के लिए पारंपरिक कार्रवाई वर्तमान कमांड को बाधित करना है: क्रमिक आदेशों को संसाधित करने के लिए डिज़ाइन किए गए प्रोग्राम अपने टॉपलेवल प्रॉम्प्ट पर वापस जाते हैं, जबकि एकल बैच कमांड या निरंतर संपर्क निकास के रूप में डिज़ाइन किए गए प्रोग्राम। जाहिर है कि आप जिस प्रोग्राम का उपयोग कर रहे हैं वह दूसरे मॉडल के अनुसार डिजाइन किया गया था।

यह सिग्नल भेजने वाली कुंजी कर्नेल में सामान्य टर्मिनल इंटरफ़ेस की एक विशेषता है, जो सभी टर्मिनल एमुलेटर और वास्तविक भौतिक टर्मिनलों द्वारा साझा की जाती है। आप कॉन्फ़िगर कर सकते हैं कि कौन सी कुंजी इस सिग्नल को भेजती है, साथ ही साथ अन्य कुंजी (सबसे विशेष रूप CtrlZसे SIGSTOP भेजने में अग्रभूमि कार्यक्रम को निलंबित करने के लिए) sttyकमांड के साथ । SIGINT से Ctrl+ _(वर्तमान टर्मिनल में) के लिए कुंजी स्विच करने के लिए :

stty intr '^_'

इसे पूरी तरह से अक्षम करने के लिए:

stty intr ''

सभी सेटिंग्स को डिफ़ॉल्ट पर रीसेट करने के लिए:

stty sane

कुंजी एक मनमाना कुंजी संयोजन नहीं हो सकता है, यह एक एकल बाइट मान होना चाहिए। sttyसेटिंग कार्यक्रमों के द्वारा अधिरोहित जा सकता है - कुछ कार्यक्रमों (विशेष रूप से पूर्ण स्क्रीन पाठ मोड प्रोग्राम) अपने स्वयं के कीबोर्ड शॉर्टकट प्रसंस्करण है।

Ground अधिक सटीक रूप से , अग्रभूमि प्रक्रिया समूह की सभी प्रक्रियाओं के लिए जिसके लिए टर्मिनल नियंत्रण टर्मिनल है


32

CTRL+ Cएक व्यवधान संकेत भेजता है ( SIGINT, जो संकेत संख्या 2 है) अग्रभूमि में नौकरी के लिए। आप trap '' 2Zork शुरू करने से पहले कमांड का उपयोग करके सिग्नल को "ट्रैपिंग" करके इसे अक्षम कर सकते हैं ।

के साथ पुन: सक्षम CTRL+ C(अप्रकाशित SIGINT) trap 2

युक्ति : आप अपने साथ ऐसा कुछ जोड़ सकते हैं ~/.bashrc:

alias zork="(trap '' 2 && cd ~/path/to/zork/ && frotz ZORK1.DAT)"

इस तरह आप कभी भी सिग्नल को डिसेबल और री-इनेबल करना नहीं भूलेंगे और zorkटर्मिनल में टाइप करके गेम शुरू करना आसान है ।

नोट : आप संख्या के बजाय संकेत नाम का उपयोग कर सकते हैं यदि यह आपके लिए अधिक सुविधाजनक हो, trap '' sigintया trap '' int। मैं सिर्फ संख्याओं का उपयोग करने के लिए उपयोग किया जाता हूं, जैसे kill -9और में।

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