เมื่อฉันพยายามที่จะหยุดบางสิ่งบางอย่างฉันใช้^Cและบางครั้ง^Dใน terminal
ความแตกต่างระหว่างสองคืออะไร ทำไมบางโปรแกรมไม่ตอบสนองต่อแต่^C ^Dทำไม Terminal.app เพียงแค่หยุดทำงานเมื่อฉันใช้^D?
เมื่อฉันพยายามที่จะหยุดบางสิ่งบางอย่างฉันใช้^Cและบางครั้ง^Dใน terminal
ความแตกต่างระหว่างสองคืออะไร ทำไมบางโปรแกรมไม่ตอบสนองต่อแต่^C ^Dทำไม Terminal.app เพียงแค่หยุดทำงานเมื่อฉันใช้^D?
คำตอบ:
CtrlCบอกให้เทอร์มินัลส่ง a SIGINTไปยังกระบวนการพื้นหน้าปัจจุบันซึ่งโดยค่าเริ่มต้นแปลเป็นการสิ้นสุดการสมัคร CtrlDบอกเทอร์มินัลว่าควรลงทะเบียน EOF ในอินพุตมาตรฐานซึ่ง bash ตีความว่าเป็นความปรารถนาที่จะออก
Ctrl+ D( ^D) หมายถึงจุดสิ้นสุดของแฟ้ม ใช้งานได้เฉพาะที่จุดเริ่มต้นของบรรทัด (ฉันลดความซับซ้อนลงเล็กน้อย) และไม่มีผลใด ๆ หากโปรแกรมไม่ได้อ่านอินพุตจากเทอร์มินัล ในการทดสอบของคุณ^Dบอกเชลล์ว่าคุณไม่ได้พิมพ์คำสั่งเพิ่มเติมอีกแล้วจึงออก เทอร์มินัลออกจากแล้วเนื่องจากโปรแกรมย่อยสิ้นสุดลง
Ctrl+ C( ^C) หมายถึง "ขัดจังหวะ" เช่นหยุดสิ่งที่คุณทำ ในทางเทคนิคแล้วการกด^Cส่งสัญญาณ INTซึ่งโดยปกติแล้วจะยุติแอปพลิเคชั่น แต่ในหลาย ๆ โปรแกรมหมายถึงกลับไปที่ระดับสูงสุด (เช่นในเชลล์ให้หยุดพิมพ์บรรทัดคำสั่งและกลับไปที่พรอมต์เก่า)
หากโปรแกรมไม่ตอบสนอง^CคุณสามารถลองCtrl+ \( ^\) สิ่งนี้จะส่งสัญญาณ QUITซึ่งโดยปกติแล้วจะยุติแอปพลิเคชั่นและโปรแกรมไม่ได้ขัดขวางหลายโปรแกรม
ปุ่มอื่นที่ส่งสัญญาณคือCtrl+ Z( ^Z) มันส่งสัญญาณ TSTPซึ่งหยุดโปรแกรมที่ทำงานอยู่เบื้องหน้า (TSTP ย่อมาจาก“ terminal stop” ซึ่งคล้ายกับSTOPแต่สามารถละเว้น TSTP ได้ในขณะที่ STOP ไม่สามารถทำได้) จากเชลล์คุณสามารถเรียกใช้การทำงานของโปรแกรมนั้นด้วยfgคำสั่ง (ดำเนินการต่อในเบื้องหน้า) หรือbgคำสั่ง พื้นหลัง).
คีย์เหล่านี้ทั้งหมดสามารถเปลี่ยนแปลงได้ด้วยsttyคำสั่ง บางโปรแกรมโดยเฉพาะอย่างยิ่งโปรแกรมเต็มหน้าจอที่มีการผูกคีย์ปิดใช้งาน
KeyboardInterrupt? มันเลิกกับ ctrl + d (ถ้าที่จุดเริ่มต้นของบรรทัด) และด้วย ctrl + \
เพิ่มไปยัง 2 คำตอบที่ดีจริง ๆ ข้างต้นนี่คือตัวอย่าง:
ถ้าคุณพิมพ์pythonเชลล์มันจะนำคุณเข้าสู่พรอมต์ >>> ของงูหลาม
ตอนนี้ถ้าคุณโดนCtrl+CมันจะพูดKeyboardInterruptและอยู่ใน >>>
หากคุณเข้าสู่ for for loop เช่นโดยพิมพ์for x in (text):รอให้คุณพิมพ์เพิ่มเติมโดยแสดงพร้อมท์ ... ถ้าคุณกดCtrl+Cตอนนี้มันจะออกจากคำสั่ง for และกลับไปที่ >>> พร้อมท์
หากคุณกดCtrl+Dณ จุดใดก็ตามไม่ว่าจะเป็น >>> หรือ ... มันจะออกจากพรอมต์หลามและกลับสู่เชลล์เดิม
ในทำนองเดียวกันหาก ssh'ed ไปยังเครื่องอื่น a Ctrl+Cจะยกเลิกคำสั่งใด ๆ ที่มีอยู่Ctrl+Dจะทำและออกจากเครื่องเช่นกัน (เช่นเดียวกับที่DeleteสำคัญคือทำCtrl+D)