มีความแตกต่างระหว่าง Ctrl + Z และ Ctrl + C ในบรรทัดคำสั่ง Unix อะไร


188

ฉันใช้ Mac OS X Terminal และฉันใช้Ctrl+ ZหรือCtrl+ Cเพื่อหยุดบางโปรแกรม แต่ฉันรู้ว่าฉันไม่รู้ว่าพวกเขากำลังทำอะไรอยู่ พวกเขาคืออะไรและต่างกันอย่างไร

คำถามนี้เป็นคำถามที่ผู้ใช้ซูเปอร์ของสัปดาห์
อ่านบล็อก 13 มีนาคม 2011 สำหรับรายละเอียดเพิ่มเติมหรือส่งคำถามประจำสัปดาห์ของคุณเอง

คำตอบ:


250

Control+ Zใช้สำหรับหยุดกระบวนการโดยส่งสัญญาณSIGSTOPซึ่งโปรแกรมไม่สามารถดักจับได้ ในขณะที่Control+ Cใช้ในการฆ่ากระบวนการด้วยสัญญาณSIGINTและสามารถถูกดักโดยโปรแกรมเพื่อให้สามารถทำความสะอาดตัวเองก่อนที่จะออกหรือไม่ออกเลย

หากคุณระงับกระบวนการสิ่งนี้จะปรากฏขึ้นในเชลล์เพื่อบอกคุณว่ากระบวนการถูกระงับ:

[1]+  Stopped                 yes

อย่างไรก็ตามถ้าคุณสังหารใครคุณจะไม่เห็นการยืนยันใด ๆ นอกจากถูกส่งกลับไปที่ shell prompt เมื่อคุณหยุดกระบวนการคุณสามารถทำสิ่งต่าง ๆ ด้วยเช่นกัน ตัวอย่างเช่นเรียกใช้สิ่งนี้:

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

7
ที่จริงแล้วมันจะส่ง SIGTSTP ซึ่งสามารถดักจับได้
Simon Richter

2
เย็น! ดังนั้นหากโปรแกรมปฏิเสธที่จะตายด้วย Ctrl + C คุณจะบังคับให้ฆ่ามันอย่างไร
Aditya MP

2
@adityamenon ค้นหาชื่อปฏิบัติการเช่นamarokและเรียกใช้killall amarokหรือเรียกใช้ps auxและหากระบวนการ id kill {process id}ที่อยู่ถัดจากชื่อปฏิบัติการและการทำงาน
Bruno Finger

22

Ctrl + Z ระงับกระบวนการด้วย SIGTSTP คุณสามารถดำเนินการต่อในภายหลัง Ctrl + C ฆ่ากระบวนการด้วย SIGINT ซึ่งจะยุติกระบวนการยกเว้นว่าเป้าหมายนั้นถูกจัดการ / เพิกเฉยดังนั้นคุณจึงไม่สามารถดำเนินการต่อได้ นอกจากนี้ยังมี SIGSTOP ซึ่งสามารถส่งได้kill()และกระบวนการไม่สามารถดักจับได้ SIGCONT เป็นคู่หูกับทั้ง SIGSTOP และ SIGTSTP ซึ่งจะยกเลิกการระงับกระบวนการชั่วคราว


ไม่นั่นคือ SIGTSTP ไม่ใช่ SIGSTOP และสามารถดักจับได้
sch

@sch ถูกต้องไหมตอนนี้?
Ben Voigt

ใช่แม้ว่า Ctrl-Z (และ CTRL-C) ทำให้กลุ่มกระบวนการ(กลุ่มกระบวนการเบื้องหน้าของเทอร์มินัล) รับสัญญาณนั้นไม่จำเป็นต้องมีเพียงกระบวนการเดียวเท่านั้น นอกจากนี้ให้สังเกต SIGTTIN และ SIGTTOU ที่ส่งไปยังกระบวนการที่ไม่อยู่ในกลุ่มกระบวนการพื้นหน้าของเทอร์มินัลเมื่อพยายามอ่านหรือเขียนจาก / ถึงมันซึ่งจะระงับกระบวนการเหล่านั้นด้วย
sch

@sch: กระบวนการกับกลุ่มไม่ใช่ความแตกต่างในวิธีการส่งสัญญาณหรือไม่ IIRC kill()ช่วยให้คุณส่งSIGSTOPไปยังกลุ่มได้ดี
Ben Voigt

ใช่คำสั่งของฉันคือเกี่ยวกับCTRL-Z ระงับกระบวนการ ...ซึ่งอาจทำให้เข้าใจผิดของประชาชนในการคิดว่ามันจะถูกส่งไปเป็นเพียงขั้นตอนหนึ่งเมื่อมันเป็นจริงงานหรือกระบวนการกลุ่ม
sch

17

CTRL + Z หยุดงาน (หยุดชั่วคราว)

CTRL + C ยุติงาน

ด้วย CTRL + C คุณไม่สามารถดำเนินการต่อได้ แต่ด้วย CTRL + Z งานที่สามารถดำเนินการต่อได้โดยเพียงแค่ป้อนคำสั่งที่ promt:

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งานที่สามารถดำเนินการต่อได้โดยเพียงแค่ป้อนที่พรอมต์คำสั่ง:

fg% 1

หากคุณมีหลายกระบวนการหยุดชั่วคราวคุณควรทำ

งาน

เพื่อดูผลลัพธ์


2

คำตอบก่อนหน้านี้ถูกต้อง แต่ด้วยเหตุผลที่ไม่ทราบบางอย่าง Ctrl-Z ระงับกระบวนการลูกทั้งหมดเช่นกัน แต่ killall -SIGSTOP ... ระงับกระบวนการ front-front (parent) เท่านั้นและปล่อยให้เด็กทำงานตามที่ต้องการ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.