टर्मिनल में Ctrl-z और Ctrl-c में क्या अंतर है?


120

किसी को भी मेरे बीच का अंतर बता सकते हैं ctrl+ zऔर ctrl+ c?

जब मैं टर्मिनल में होता हूं, तो दोनों संयोजन वर्तमान प्रक्रिया को रोक देते हैं, लेकिन दोनों के बीच वास्तव में क्या अंतर है?


मैंने यहाँ एक बहुत ही समान प्रश्न पूछा है: unix.stackexchange.com/questions/116959/…
ThorSummoner


हाँ मैं दोनों के अंतर को समझने में सफल रहा था !!
चैतन्य लालकुंडी

एक बात जो मैं यहां जोड़ना चाहता हूं, वह यह कि ज्यादातर लोग (मेरे पेशेवर सर्कल में भी) उनके बीच अंतर नहीं करते हैं। और कमांड को समाप्त करने के लिए CTRL-Z विकल्प का उपयोग किया। जो गलत प्रथा है। इन सभी उदाहरणों पर आपको CTRL-C का उपयोग करना चाहिए। CTRL-Z के रूप में बस पृष्ठभूमि में डाल दिया। इसलिए जब तक वह CTRL-Z को समाप्त करने के लिए प्रेस नहीं करता है, तब तक प्रक्रिया पूरी नहीं की जाती है, जो उपयोगकर्ता की इच्छा नहीं हो सकती है (अधिकांश समय)।
kuldeep.kamboj

जवाबों:


155

यदि हम किनारे के मामलों को एक तरफ छोड़ देते हैं, तो अंतर सरल है। Control+ Cआवेदन को लगभग तुरंत रद्द कर देता है जबकि Control+ Zइसे पृष्ठभूमि में बंद कर देता है, निलंबित कर दिया जाता है।

शेल इन संयोजनों पर अंतर्निहित अनुप्रयोगों के लिए अलग-अलग संकेत भेजता है:

  • Control+ C(नियंत्रण वर्ण intr) SIGINT भेजता है जो अनुप्रयोग को बाधित करेगा। आमतौर पर यह गर्भपात का कारण बनता है, लेकिन यह निर्णय लेने के लिए आवेदन पर निर्भर है।

  • Control+ Z(नियंत्रण चरित्र susp) SIGTSTP को एक अग्रभूमि अनुप्रयोग में भेजता है, इसे प्रभावी रूप से पृष्ठभूमि में रखकर निलंबित कर दिया जाता है। यह उपयोगी है अगर आपको किसी चीज़ को तोड़ने के लिए एक संपादक की तरह बाहर निकलने की ज़रूरत है और आपको आवश्यक कुछ डेटा हड़पने के लिए। आप आवेदन में वापस जा सकते हैं fg(या %xजहां xदिखाया गया है कि नौकरी नंबर कहां है jobs)।

    हम इसे चलाकर nano TEST, फिर Control+ Zऔर फिर दबाकर परीक्षण कर सकते हैं ps aux | grep TEST। यह हमें दिखाएगा कि nanoप्रक्रिया अभी भी चल रही है:

    oli     3278  0.0  0.0  14492  3160 pts/4    T    13:59   0:00 nano TEST
    

    इसके अलावा, हम देख सकते हैं (उस टी से, जो स्थिति कॉलम में है) कि प्रक्रिया को रोक दिया गया है । तो यह अभी भी जीवित है, लेकिन यह नहीं चल रहा है ... इसे फिर से शुरू किया जा सकता है।

    यदि वे सो रहे हैं तो कुछ अनुप्रयोग क्रैश हो जाएंगे (जैसे कि एक वेब अनुरोध)।


51
यह जोड़ने योग्य है कि Ctrl + Z'ed को अग्रभूमि में वापस रखे बिना किसी एप्लिकेशन को अनसेंड करने के लिए bg(इसके बजाय fg) चलाना संभव है; प्रभावी रूप से आपको आवेदन और आवेदन शुरू करने वाले दोनों शेल का नियंत्रण प्रदान करता है, जैसे कि आपने आवेदन शुरू करते समय उपयोग किया था । यह अक्सर काम में आता है जब आप इसे :) के साथ शुरू करना भूल जाते हैं&&
माल्ट स्कॉरुप्पा

6
और आप fgफिर से टाइप करके उस प्रक्रिया में वापस आ सकते हैं !
sleblanc

4
मामले में कई नौकरियां निलंबित या पृष्ठभूमि में होती हैं: "नौकरियां" उन्हें सूचीबद्ध करती हैं, और "fg% n" या "bg% n" या जॉब% n को अग्रभूमि, पृष्ठभूमि में रखने के लिए "इसे मारें% n" या इसे मार दें। ।
ओलिवियर दुलक

3
@ ओली: आपका दूसरा पैराग्राफ कहता है, "शेल भेज [एस] ... अंतर्निहित अनुप्रयोगों के लिए संकेत ..." नहीं, ऑपरेटिंग सिस्टम / टर्मिनल ड्राइवर सिग्नल भेजता है। (एक विंडो सिस्टम में, विंडो मैनेजर एक भूमिका निभा सकता है।) इसके अलावा, पूरा होने के लिए (हालांकि मूल प्रश्न के दायरे से परे), आप Ctrl + \ का उल्लेख करना चाह सकते हैं।
स्कॉट

सत्र को कैसे पता चलता है कि किस प्रक्रिया समूह को ctrl cया तो करने के बाद अग्रभूमि में लौटना है ctrl z? यह SID (बैश) को डिफॉल्ट करता है?
जिगगंजर

16

Control+ Zएक प्रक्रिया को स्थगित करता है ( SIGTSTP) और Control+ Cएक प्रक्रिया को बाधित करता है ( SIGINT)

http://en.wikipedia.org/wiki/Control-Z

यूनिक्स जैसी प्रणालियों पर, नियंत्रण + जेड एक प्रक्रिया को निलंबित करने वाले प्रमुख अनुक्रम के लिए सबसे आम डिफ़ॉल्ट कीबोर्ड मैपिंग है

http://en.wikipedia.org/wiki/Control-C

POSIX सिस्टम में, अनुक्रम सक्रिय प्रोग्राम को SIGINT सिग्नल प्राप्त करने का कारण बनता है। यदि प्रोग्राम निर्दिष्ट नहीं करता है कि इस स्थिति को कैसे संभालना है, तो इसे समाप्त कर दिया गया है। आमतौर पर एक प्रोग्राम जो एक SIGINT को संभालता है वह अभी भी खुद को समाप्त करेगा, या कम से कम इसके अंदर चल रहे कार्य को समाप्त करेगा


1
अच्छी नौकरी पोस्टिंग संदर्भ। लेकिन आमतौर पर, तकनीकी संदर्भ के लिए विकिपीडिया बहुत अच्छा स्रोत नहीं है।
हारून

3
@ BryceAtNetwork23 जो बहुत सच है; मुझे लगा कि इस मामले में विकिपीडिया की परिभाषा काफी हद तक पर्याप्त थी। मैं भविष्य में और अधिक तकनीकी संदर्भों की तलाश करूंगा!
स्लीप डिपेंडेड बुलबासौर

13

Ctrl+ Cका उपयोग सिग्नल के साथ एक प्रक्रिया को मारने के लिए किया जाता है SIGINT, दूसरे शब्दों में यह एक विनम्र हत्या है

Ctrl+ Z का उपयोग सिग्नल भेजने की प्रक्रिया को स्थगित करने के लिए किया जाता है SIGTSTP, जो नींद के संकेत की तरह है, जिसे पूर्ववत किया जा सकता है और इस प्रक्रिया को फिर से शुरू किया जा सकता है।

लेकिन जब एक प्रक्रिया निलंबित कर दिया है, हम इसे फिर से से शुरू कर सकते हैं fg(अग्रभूमि में फिर से शुरू) और bg(पृष्ठभूमि में फिर से शुरू), लेकिन मैं एक की मौत हो गई प्रक्रिया को फिर से शुरू नहीं कर सकते, कि का उपयोग कर के बीच एक अंतर है Ctrl+ Cऔर Ctrl+ Z

हम निलंबित प्रक्रियाओं को कैसे देख सकते हैं?

jobsआदेश इस तरह उत्पादन देता है:

[1]-  Stopped                 cat
[2]+  Stopped                 vi

पृष्ठभूमि में एक निलंबित प्रक्रिया को कैसे मारना है?

killआदेश का उपयोग करके :

kill %nकमांड nद्वारा प्रदर्शित संख्या कहां है jobs। तो अगर मैं बिल्ली को मारना चाहता हूं kill %1:।


1
इस थ्रेड में अन्य टिप्पणियों के अनुसार, सुधार: ctrl-z एक SIGTSTP सिग्नल भेजता है जो SIGSTOP नहीं है।
गुनगुनाएं

मार% 1 मुझे बताता है - ऑपरेशन की अनुमति नहीं है। ऐसा क्यों? धन्यवाद
सत्य प्रकाश

7

सीधे शब्दों में:

  • CTRL-C अनुरोध है कि कार्यक्रम निरस्त करें

  • CTRL-Z कार्यक्रम को निलंबित करने और पृष्ठभूमि में जाने के लिए मजबूर करता है ।

    यह आपको बाद में कमांड के साथ इसे फिर से शुरू करने की अनुमति देता है fg। जब आप लॉगिन शेल से बाहर निकलते हैं तो शेष पृष्ठभूमि कार्य मारे जाते हैं।


5

यह मदद करनी चाहिए

Ctrl+ Zका उपयोग सिग्नल SIGSTOP को भेजकर एक प्रक्रिया को निलंबित करने के लिए किया जाता है, जिसे प्रोग्राम द्वारा इंटरसेप्ट नहीं किया जा सकता है। जबकि Ctrl+ Cका उपयोग सिग्नल SIGINT के साथ एक प्रक्रिया को मारने के लिए किया जाता है, और इसे एक प्रोग्राम द्वारा इंटरसेप्ट किया जा सकता है ताकि यह बाहर निकलने से पहले अपने आप को साफ कर सके, या बिल्कुल बाहर न निकले।


4
यह पूरी तरह सही नहीं है। यह भेजता है SIGTSTP, जिसे प्रोग्राम द्वारा पकड़ा जा सकता है। चार अलग-अलग संकेत है, जो एक कार्यक्रम को स्थगित कर सकते हैं SIGSTOP, SIGTSTP, SIGTTIN, SIGTTOU। उनमें से केवल SIGSTOPअवरुद्ध नहीं किया जा सकता है। अन्य तीन का उपयोग टर्मिनल द्वारा विभिन्न परिस्थितियों में प्रक्रिया को रोकने के लिए किया जाता है।
कास्परड

4

जब आप ctrl+ दबाते हैं c, तो इसका मतलब है कि आप अपनी प्रक्रिया को SIGINT भेजते हैं। जैसे आप यह आदेश लिखें: kill -SIGINT <your_pid>। यह आपकी प्रक्रिया को मार देगा। पीएस कमांड जारी करते समय आप इसे क्यों नहीं देख सकते हैं ।
जब आप ctrl+ दबाते हैं z, तो इसका मतलब है कि आप अपनी प्रक्रिया में SIGSTOP भेजें। जैसे आप यह आदेश लिखें: kill -SIGKSTOP <your_pid>। यह आपकी प्रक्रिया को रोक देगा, लेकिन प्रक्रिया अभी भी जीवित है। तो आप अपनी प्रक्रिया को SIGCONT भेजकर अपनी प्रक्रिया को फिर से सक्रिय कर सकते हैं।

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