Unix कमांड लाइन में Ctrl + Z और Ctrl + C के बीच क्या अंतर है?


187

मैं मैक ओएस एक्स टर्मिनल का उपयोग कर रहा हूं। और मैं कुछ कार्यक्रमों को रोकने के लिए Ctrl+ Zया Ctrl+ Cका उपयोग करता हूं । लेकिन मुझे एहसास हुआ कि मुझे नहीं पता कि वे वास्तव में क्या कर रहे हैं। वे क्या हैं और उनके बीच क्या अंतर है?

यह प्रश्न सप्ताह का एक सुपर यूजर प्रश्न था । अधिक विवरण के लिए
13 मार्च, 2011 ब्लॉग प्रविष्टि पढ़ें या अपना प्रश्न सप्ताह प्रस्तुत करें

जवाबों:


249

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

यदि आप एक प्रक्रिया को निलंबित कर देते हैं, तो यह आपको यह बताने के लिए शेल में दिखाई देगा कि यह निलंबित कर दिया गया है:

[1]+  Stopped                 yes

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

fg

निलंबित किए गए कार्यक्रम के साथ इसे अग्रभूमि में वापस लाया जाएगा।

और कमांड चला रहा है

bg

किसी प्रोग्राम को स्थगित करने से यह पृष्ठभूमि में चलने की अनुमति देगा (प्रोग्राम का आउटपुट अभी भी TTY तक जाएगा, हालांकि)।

यदि आप एक निलंबित कार्यक्रम को मारना चाहते हैं, तो आपको fgपहले इसे वापस लाने की ज़रूरत नहीं है , आप बस कमांड कर सकते हैं:

kill %1

यदि आपके पास कई निलंबित कमांड हैं, तो चल रहा है

jobs

उन्हें इस तरह सूचीबद्ध करेगा:

[1]-  Stopped                 pianobar
[2]+  Stopped                 yes

का उपयोग करना %#है, जहां #काम संख्या (से वर्ग कोष्ठक में से एक है jobsउत्पादन) के साथ bg, fgया kill, कि काम पर कार्रवाई करने के लिए इस्तेमाल किया जा सकता।


3
आप यह बदल सकते हैं कि कौन सी कुंजी sttyकमांड का उपयोग करके किस कार्य को करती है । उदाहरण के लिए stty susp ^Z या stty intr ^C
RedGrittyBrick 12

7
दरअसल, यह SIGTSTP भेजता है, जिसे इंटरसेप्ट किया जा सकता है।
साइमन रिक्टर

2
ठंडा! इसलिए यदि कोई प्रोग्राम Ctrl + C के साथ मरने से इनकार कर रहा है तो आप इसे कैसे मार सकते हैं?
आदित्य एमपी

2
@adityamenon निष्पादन योग्य नाम खोजें, उदाहरण के लिए amarokऔर चलाएं killall amarok, या चलाएं ps auxऔर निष्पादन योग्य नाम के आगे प्रक्रिया आईडी ढूंढें और चलाएं kill {process id}
ब्रूनो फिंगर

22

Ctrl + Z SIGTSTP के साथ प्रक्रिया को निलंबित कर देता है, आप इसे बाद में फिर से शुरू कर सकते हैं। Ctrl + C, SIGINT के साथ प्रक्रिया को मारता है, जो प्रक्रिया को तब तक समाप्त करता है जब तक कि इसे लक्ष्य द्वारा संभाला / अनदेखा नहीं किया जाता है, इसलिए आप इसे फिर से शुरू नहीं कर सकते। वहाँ भी एक SIGSTOP है जिसे द्वारा भेजा जा सकता है kill()और जो प्रक्रिया को रोक नहीं सकता है। SIGCONT SIGSTOP और SIGTSTP दोनों का प्रतिरूप है जो प्रक्रिया को अन-सस्पेंड करता है।


नहीं, यह SIGTSTP है, SIGSTOP नहीं है और इसे इंटरसेप्ट किया जा सकता है।
sch

@sch, क्या यह अभी सही है?
बेन वोइग्ट

हां, हालांकि Ctrl-Z (और CTRL-C) उस सिग्नल को प्राप्त करने के लिए एक प्रक्रिया समूह (टर्मिनल का अग्रभूमि प्रक्रिया समूह ) का कारण बनता है , न कि केवल एक प्रक्रिया। यह भी ध्यान दें कि SIGTTIN और SIGTTOU ने प्रक्रियाओं को टर्मिनल के अग्रभूमि प्रक्रिया समूह में नहीं भेजा है, जब तब / से इसे पढ़ने या लिखने का प्रयास किया जाता है, जो उन्हें निलंबित भी करता है।
sch

@ एसएचसी: समूह बनाम प्रक्रिया नहीं है केवल एक अंतर है कि सिग्नल कैसे भेजा जाता है? IIRC kill()आपको SIGSTOPएक समूह को ठीक भेजने की सुविधा देता है।
बेन Voigt

हां, मेरा आदेश आपके CTRL-Z के बारे में था कि इस प्रक्रिया को निलंबित कर दिया जाए ... जो लोगों को यह सोचने में गुमराह कर सकता है कि यह सिर्फ एक प्रक्रिया में भेजा जाता है जब यह वास्तव में एक नौकरी या प्रक्रिया समूह है
sch

17

CTRL + Z किसी काम को रोकता है (रोक देता है)

CTRL + C नौकरी समाप्त करता है

CTRL + C के साथ आप प्रक्रिया को फिर से शुरू नहीं कर सकते हैं, लेकिन CTRL + Z के साथ काम को फिर से शुरू किया जा सकता है, केवल कमांड प्रॉम्प्ट में प्रवेश कर सकते हैं:

fg %1

यदि आपके पास कई प्रक्रियाएँ हैं, तो आपको करना चाहिए

jobs

आउटपुट को देखने और उदाहरण के लिए फिर से शुरू करने के लिए उचित संख्या का चयन करें

fg %3

सूची में तीसरा काम फिर से शुरू करता है। आपके पास पृष्ठभूमि में चलने वाली नौकरियां भी हो सकती हैं

bg %n

जहां n नौकरी की संख्या है।


यह नौकरियां (प्रक्रिया समूह) हैं, न कि ऐसी प्रक्रियाएं जो CTRL-C, CTRL-Z, fg और bg से निपटती हैं।
sch

3
Cntrl + Z pause the currently running process. 

तथा

Cntrl + C simply terminates the running process.

Cntrl + C का उपयोग करके आप प्रक्रिया को फिर से शुरू नहीं कर सकते। जहाँ Cntrl + Z का उपयोग करते हुए आप इस प्रक्रिया को फिर से शुरू कर सकते हैं।

प्रक्रिया को फिर से शुरू करने के लिए fg% 1 का उपयोग करें।


3

CTRL+ Z(नौकरी रोक देता है)

CTRL+ Cनौकरी समाप्त करता है

साथ CTRL+ Cआप इस प्रक्रिया को फिर से शुरू नहीं कर सकते, लेकिन साथ CTRL+ Zकाम सिर्फ कमांड प्रॉम्प्ट पर दर्ज करके फिर से शुरू किया जा सकता है:

एफजी% 1

यदि आपके पास कई प्रक्रियाएँ हैं, तो आपको करना चाहिए

नौकरियां

आउटपुट देखने के लिए।


2

पिछले उत्तर सही हैं, लेकिन किसी अज्ञात कारण से Ctrl-Z सभी बाल प्रक्रियाओं को भी निलंबित कर देता है, लेकिन Killall -SIGSTOP ... केवल सबसे सामने (माता-पिता) प्रक्रिया को निलंबित कर देता है और बच्चों को चलाने के लिए छोड़ देता है जैसे वे चाहते हैं।

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