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


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

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


181
2018-03-27 00:39


मूल




जवाब:


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

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

[1]+  Stopped                 yes

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

fg

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

और आदेश चला रहा है

bg

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

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

kill %1

यदि आपके पास एकाधिक निलंबित आदेश हैं, तो चल रहा है

jobs

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

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

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


238
2018-03-27 01:15



आप बदल सकते हैं कि कौन सी चाबियाँ का उपयोग करके नौकरी करते हैं stty आदेश। उदाहरण के लिए stty susp ^Z  या stty intr ^C। - RedGrittyBrick
असल में, यह SIGTSTP भेजता है, जिसे अवरुद्ध किया जा सकता है। - Simon Richter
ठंडा! तो यदि कोई प्रोग्राम Ctrl + C के साथ मरने से इनकार कर रहा है तो आप इसे कैसे मारने के लिए मजबूर करते हैं? - Aditya M P
@adityamenon निष्पादन योग्य नाम ढूंढें, उदाहरण के लिए amarok और भाग खड़ा हुआ killall amarok, या चलाओ ps aux और निष्पादन योग्य नाम के आगे प्रक्रिया आईडी खोजें और चलाएं kill {process id}। - Bruno Finger


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


22
2018-03-27 00:43



नहीं, वह सिगस्टॉप है, सिगस्टॉप नहीं है और इसे अवरुद्ध किया जा सकता है। - sch
@ एसएच, क्या यह अभी सही है? - Ben Voigt
हां, हालांकि Ctrl-Z (और CTRL-C) एक प्रक्रिया का कारण बनता है समूह (टर्मिनल का अग्रभूमि प्रक्रिया समूह) उस सिग्नल को प्राप्त करने के लिए, जरूरी नहीं कि केवल एक प्रक्रिया हो। सिग्टिन और सिगेटू को टर्मिनल के अग्रभूमि प्रक्रिया समूह में न होने पर प्रक्रियाओं को भेजा गया है, फिर जब इसे पढ़ने या लिखने का प्रयास किया जाता है, तो उन्हें भी निलंबित कर दिया जाता है। - sch
@ एसएचसी: प्रक्रिया बनाम समूह सिग्नल कैसे भेजा जाता है में केवल एक अंतर नहीं है? IIRC kill() आपको भेजने देता है SIGSTOP एक समूह के लिए बस ठीक है। - Ben Voigt
हाँ, मेरा आदेश आपके बारे में था CTRL-Z प्रक्रिया को निलंबित करता है ... जो लोगों को यह सोचने में गुमराह कर सकता है कि यह वास्तव में एक प्रक्रिया में केवल एक प्रक्रिया में भेजा जाता है काम या प्रक्रिया समूह। - sch


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

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

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

fg %1

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

jobs

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

fg %3

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

bg %n

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


17
2018-03-27 11:52



यह नौकरियां (प्रक्रिया समूह) है, प्रक्रिया नहीं करती है कि सीटीआरएल-सी, सीटीआरएल-जेड, एफजी और बीजी सौदे के साथ। - sch


Cntrl + Z pause the currently running process. 

तथा

Cntrl + C simply terminates the running process.

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

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


3
2018-03-13 06:48





CTRL+जेड नौकरी रोकता है (रोकता है)

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

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

एफजी% 1

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

नौकरियों

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


3
2017-07-03 15:57





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


2
2018-02-26 17:19