UNIX / Mac OS X टर्मिनल के लिए ^ C और ^ D में क्या अंतर है?


61

जब मैं कुछ रोकने की कोशिश करता हूं, तो मैं ^Cकभी-कभी ^Dटर्मिनल में उपयोग करता हूं ।

दोनों में क्या अंतर है? क्यों कुछ कार्यक्रम का जवाब नहीं है ^C, लेकिन ^D। जब मैं उपयोग करता हूं तो टर्मिनल.एप्प ही क्यों छोड़ता है ^D?


FYI करें: इसके लिए विकिपीडिया पृष्ठ देखें: Control + C द्वारा निर्मित TEXT वर्ण U + 0003 का END , और Control + D द्वारा निर्मित TransMISSION वर्ण U + 0004 का अंत
बेसिल बोर्के

जवाबों:


60

CtrlCटर्मिनल को SIGINTवर्तमान अग्रभूमि प्रक्रिया में भेजने के लिए कहता है, जो डिफ़ॉल्ट रूप से आवेदन को समाप्त करने में अनुवाद करता है। CtrlDटर्मिनल को बताता है कि उसे मानक इनपुट पर ईओएफ दर्ज करना चाहिए, जो बाहर निकलने की इच्छा के रूप में व्याख्या करता है।


62

Ctrl+ D( ^D) का अर्थ है फ़ाइल का अंत । यह केवल एक लाइन की शुरुआत में काम करता है (मैं थोड़ा सरल कर रहा हूं), और इसका कोई प्रभाव नहीं है यदि प्रोग्राम टर्मिनल से इनपुट नहीं पढ़ रहा है। अपने प्रयोग में, ^Dशेल को बताया कि आप कोई और कमांड टाइप करने नहीं जा रहे थे, इसलिए यह बाहर निकल गया; तब टर्मिनल से बाहर निकल गया क्योंकि उसके उपप्रोग्राम को समाप्त कर दिया था।

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

यदि कोई प्रोग्राम जवाब नहीं देता है ^C, तो आप Ctrl+ \( ^\) कोशिश कर सकते हैं । यह QUIT सिग्नल भेजता है , जो डिफ़ॉल्ट रूप से एक एप्लिकेशन को समाप्त करता है, और जो इतने सारे प्रोग्राम को रोक नहीं पाता है।

एक और कुंजी जो सिग्नल भेजती है Ctrl+ Z( ^Z) है। यह TSTP सिग्नल भेजता है , जो अग्रभूमि में चल रहे प्रोग्राम को रोक देता है। (TSTP "टर्मिनल स्टॉप" के लिए छोटा है; यह STOP के समान है लेकिन TSTP को नजरअंदाज किया जा सकता है जबकि STOP नहीं है।) शेल से, आप fgकमांड के साथ उस प्रोग्राम के निष्पादन को फिर से शुरू कर सकते हैं (अग्रभूमि में फिर से शुरू) या bgकमांड (फिर से शुरू करें) पृष्ठभूमि)।

इन सभी कुंजियों को sttyकमांड के साथ बदला जा सकता है । कुछ प्रोग्राम, विशेष रूप से फ़ुल-स्क्रीन प्रोग्राम जिनमें प्रमुख बाइंडिंग हैं, उन्हें अक्षम करें।


एक छोटा सुधार: कंट्रोल-जेड TSTP (टर्मिनल स्टॉप) सिग्नल भेजता है। इसे प्रक्रियाओं द्वारा पकड़ा या अनदेखा किया जा सकता है, जबकि STOP सिग्नल नहीं हो सकता है।
क्रिस पेज

इसकी आवश्यकता है! यह अटक गया था, और मैं बाहर नहीं निकल सका
ahnbizcad

1
CTRL-D के बारे में बस एक सुझाव: इसका अर्थ है "इनपुट मैंने अब तक टाइप किया हुआ फ्लश" और यदि लाइन खाली है, तो पढ़ा () शून्य के साथ लौटता है, और इसे "फ़ाइल के अंत" के रूप में व्याख्या की जाती है।
लूका

यह सुपर महत्वपूर्ण और सहायक जानकारी है; व्यापक और स्पष्ट स्पष्टीकरण के लिए धन्यवाद
आयनो

बस जिज्ञासु होने के नाते, शेल में चलने वाला पायथन प्रोगैम सीटीटी + सी के साथ क्यों नहीं छोड़ता है, इसके बजाय यह संकेत देता है KeyboardInterrupt? यह ctrl + d (यदि एक लाइन की शुरुआत में), और ctrl + \ के साथ छोड़ता है।
रिक

2

ऊपर 2 बहुत अच्छे जवाबों को जोड़कर, यहाँ एक उदाहरण दिया गया है:

यदि आप pythonशेल में टाइप करते हैं, तो यह आपको अजगर के >>> प्रॉम्प्ट में ले जाता है।

अब, यदि आप हिट करते हैं Ctrl+C, तो यह कहेगा KeyboardInterruptकि >>> में रहें।
आप पाश के लिए एक में प्रवेश करते हैं, तो टाइप करके जैसे for x in (text):यह आप, दिखा एक ... शीघ्र से आगे टाइप करने के लिए करता है, तो आप हिट इंतजार कर रहा है Ctrl+Cअब, यह बयान के लिए से बाहर निकलें और >>> शीघ्र करना आरंभ कर देंगे
तो आप हिट Ctrl+Dकिसी भी बिंदु पर, >>> में या ... यह अजगर शीघ्र से बाहर निकल जाएगा और मूल शेल में वापस आ जाएगा।

इसी तरह, यदि किसी अन्य मशीन में ssh'ed किया जाता है, तो Ctrl+Cकोई भी मौजूदा कमांड को समाप्त कर देगा , ऐसा करेगा और मशीन से भी Ctrl+Dबाहर निकल जाएगा। (इसके अलावा, Deleteकुंजी एक करने के रूप में ही है Ctrl+D)


मैं इस जवाब की सराहना करता हूं। हालाँकि, मुझे कुछ अशुद्धि तब लगी जब मैं इसे अपने लिए आज़मा रहा था। एक दूरस्थ मशीन में ssh'ed और python प्रक्रिया को चलाने के दौरान, Ctrl + D ने अजगर को बाहर निकाल दिया और मुझे दूरस्थ मशीन के संकेत पर वापस ले गया, यह मशीन से बाहर नहीं निकला। इसके अलावा, डिलीट कुंजी किसी भी मामले में Ctrl + D के समान काम नहीं करती थी, रिमोट प्रॉम्प्ट पर, या मेरे स्थानीय प्रॉम्प्ट पर अजगर चला रही थी। यह वास्तव में अजगर में टाइप करते समय पात्रों को हटाने के अलावा कुछ भी नहीं लगता था। हालाँकि, टाइप करते समय Ctrl + D ने डिलीट की के रूप में कार्य किया, इसने पात्रों को हटा दिया।
स्टैक अंडरफ्लो

1
यह दिलचस्प है, मुझे लगता है कि यह उस प्रकार के शेल पर निर्भर हो सकता है जिसे आप उपयोग कर रहे हैं (bash, ksh etc)।
सिद्धार्थ
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.