سؤال ما الفرق بين Ctrl + Z و Ctrl + C في سطر أوامر Unix؟


أنا أستخدم نظام Mac OS X Terminal. وأنا أستخدم السيطرة+Z أو السيطرة+C لإيقاف بعض البرامج. لكنني أدركت أنني لا أعرف ما يفعلونه بالضبط. ما هي وما الفرق بينهما؟

كان هذا السؤال سؤال المستخدم الفائق لهذا الأسبوع.
  اقرأ 13 مارس 2011 دخول بلوق لمزيد من التفاصيل أو أرسل ملكك سؤال الاسبوع.


181
2018-03-27 00:39


الأصل




الأجوبة:


مراقبة+Z يستخدم لتعليق عملية عن طريق إرسالها للإشارة SIGSTOP، والتي لا يمكن اعتراضها من قبل البرنامج. في حين مراقبة+C يستخدم لقتل عملية مع الإشارة SIGINT، ويمكن اعتراضها من قبل برنامج حتى تتمكن من تنظيف نفسه قبل الخروج ، أو عدم الخروج على الإطلاق.

إذا قمت بتعليق عملية ، فسيظهر ذلك في shell لإخبارك بأنه قد تم تعليقه:

[1]+  Stopped                 yes

ومع ذلك ، إذا قمت بقتل واحد ، فلن ترى أي تأكيد آخر غير إسقاطه مرة أخرى إلى مطالبة shell. عندما تعلق عملية ما ، يمكنك فعل أشياء خيالية معها أيضًا. على سبيل المثال ، تشغيل هذا:

fg

مع تعليق البرنامج ، ستعيده إلى المقدمة.

وتشغيل الأمر

bg

مع تعليق البرنامج سيسمح بتشغيله في الخلفية (سيظل إخراج البرنامج إلى TTY ، رغم ذلك).

إذا كنت تريد قتل برنامج معلق ، فلن تضطر إلى إعادته مرة أخرى 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 ، التي تقوم بإنهاء العملية ما لم يتم التعامل معها / تجاهلها من قبل الهدف ، لذلك لا يمكنك استئنافها. هناك أيضا SIGSTOP التي يمكن إرسالها من قبل kill() والتي لا يمكن أن تعترضها العملية. SIGCONT هو نظير لكل من SIGSTOP و SIGTSTP التي تعلق العملية.


22
2018-03-27 00:43



لا ، هذا SIGTSTP ، وليس SIGSTOP ويمكن اعتراضها. - sch
sch ، هل هذا صحيح الآن؟ - Ben Voigt
نعم ، على الرغم من أن Ctrl-Z (و CTRL-C) يسبب عملية مجموعة (مجموعة عملية المقدمة من المحطة) لتلقي تلك الإشارة ، وليس بالضرورة عملية واحدة فقط. لاحظ أيضًا أن SIGTTIN و SIGTTOU تم إرسالهما إلى عمليات ليست في مجموعة معالجة المقدمة من المحطة الطرفية عند محاولة القراءة أو الكتابة من / إلى ذلك ، مما يؤدي إلى تعليقها أيضًا. - sch
sch: أليست مجموعة العمليات فقط اختلافًا في كيفية إرسال الإشارة؟ IIRC kill() يتيح لك الإرسال SIGSTOP لمجموعة على ما يرام. - Ben Voigt
نعم ، كان الأمر يتعلق بك يعلق CTRL-Z العملية ... التي قد تضلل الناس إلى الاعتقاد أنها ترسل إلى عملية واحدة فقط عندما تكون في الواقع وظيفة أو مجموعة عملية. - sch


توقف CTRL + Z (توقف مؤقت) مهمة

ينهي CTRL + C مهمة

مع CTRL + C لا يمكنك استئناف العملية ولكن مع CTRL + Z يمكن استئناف المهمة بمجرد الدخول في الأمر PROMT:

fg %1

إذا كان لديك عدة عمليات متوقفة مؤقتًا ، فيجب عليك القيام بذلك

jobs

لمشاهدة الإخراج وتحديد العدد المناسب لاستئنافه ، على سبيل المثال ،

fg %3

يستأنف المهمة الثالثة في القائمة. يمكنك أيضًا تشغيل مهام في الخلفية باستخدام

bg %n

حيث n هو رقم الوظيفة.


17
2018-03-27 11:52



هذه الوظائف (مجموعات العمليات) ، وليس العمليات التي تتعامل معها CTRL-C و CTRL-Z و fg و bg. - 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+Z توقف (توقف) وظيفة

CTRL+Cينهي وظيفة

مع CTRL+C لا يمكنك استئناف العملية ، ولكن مع CTRL+Z يمكن استئناف المهمة بمجرد إدخالها في موجه الأوامر:

fg٪ 1

إذا كانت لديك عمليات متعددة متوقفة مؤقتًا ، فيجب عليك القيام بذلك

وظائف

لرؤية الإخراج.


3
2017-07-03 15:57





الإجابات السابقة صحيحة ، لكن لسبب غير معروف ، Ctrl-Z يعلق جميع عمليات الطفل أيضًا ، لكن killall -SIGSTOP ... يعلق فقط العملية الأمامية (الأم) ويترك الأطفال لتشغيل كما يحلو لهم.


2
2018-02-26 17:19