ctrl c เทียบกับ ctrl z ด้วยเบื้องหน้างาน


26

Ctrl+ Zหยุดงานขณะที่Ctrl+ Cฆ่างาน

ทำไมถึงเป็นอย่างนั้น? วิธีอื่นจะไม่เข้าท่ามากกว่านี้หรือ

z@z-lap:~$ sleep 100&
[1] 4458
z@z-lap:~$ sleep 200&
[2] 4459
z@z-lap:~$ jobs
[1]-  Running                 sleep 100 &
[2]+  Running                 sleep 200 &
z@z-lap:~$ fg %1
sleep 100
^Z
[1]+  Stopped                 sleep 100
z@z-lap:~$ jobs
[1]+  Stopped                 sleep 100
[2]-  Running                 sleep 200 &
z@z-lap:~$ fg %1
sleep 100
^C
z@z-lap:~$ jobs
[2]+  Running                 sleep 200 &

4
"วิธีอื่นจะไม่เข้าท่ามากกว่านี้หรือ" คุณช่วยระบุสาเหตุที่คุณคิดว่ามันเป็นได้อย่างไร
glglgl

คำตอบ:


55

ฉันคิดว่าคุณอาจสับสนเกี่ยวกับสัญกรณ์การควบคุมงาน สะดุดตา "หยุด" หมายความว่างานยังมีชีวิตอยู่ แต่ความสามารถในการประมวลผลทุกอย่างถูกจัดขึ้น (มันไม่ได้ให้เวลาบน CPU ในการประมวลผลอะไร) นี่เป็นสถานะ "หยุดชั่วคราว" หรือ "ถูกระงับ" อย่างมีประสิทธิภาพแม้ว่าจะไม่ใช่คำศัพท์ทางเทคนิคที่ถูกต้อง

  • CtrlCไม่ได้ "หยุด" งานมันยกเลิกหรือฆ่ามัน ในทางเทคนิคแล้วจะทำให้สัญญาณขัดจังหวะถูกส่งไปยังโปรแกรมบอกให้ยกเลิกการทำงานและออกทันที บางโปรแกรมจะได้ยินสัญญาณนี้และทำความสะอาดฉุกเฉินด้วยตนเองก่อนที่จะออก คนอื่นจะไม่ตอบสนองต่อสัญญาณและถูกยกเลิกในเวลาต่อมา

  • CtrlZในทางกลับกัน "หยุด" งาน อีกครั้งนี้จะทำกับสัญญาณ แต่คราวนี้มันเป็น 'หยุด' แทนสัญญาณ 'ขัดจังหวะ' สิ่งนี้ทำให้มันถูกพักไว้อย่างมีประสิทธิภาพและคืนการควบคุมให้กับเชลล์ แต่ไม่ได้ฆ่างานจริงๆ หากคุณต้องการให้งานดังกล่าวทำงานต่อไปคุณสามารถออกbgคำสั่งเพื่อส่งงานที่หยุดล่าสุดไปยังพื้นหลัง จากนั้นมันจะทำงานเป็นแบ็คกราวน์ต่อไปราวกับว่าคุณได้ทำงาน&ในครั้งแรก นอกจากนี้คุณยังสามารถใช้fgเพื่อหยุดงานล่าสุดที่หยุดทำงานในเบื้องหน้า (อนุญาตให้ดำเนินการต่อจากที่ค้างไว้และให้คุณโต้ตอบกับมันอีกครั้ง)


ฉันยังคิดว่า Ctrl + Z จะส่ง SIGKILL และ Ctrl + C จะส่ง SIGINIT ดังนั้น Ctrl + Z ก็จะฆ่างานด้วย แต่จากตัวอย่างของฉัน Ctrl + Z เท่านั้นหยุดงานอย่างที่คุณพูด มันทำให้ฉันสับสนเล็กน้อย
neo0

10
@ neo0 - บางทีคุณอาจเคยชินกับการตั้งค่าแบบกำหนดเองแปลก ๆ ? คุณสามารถกำหนดค่าสิ่งนั้น - แม้ว่าคุณอาจไม่ควรในกรณีที่คุณมีแอพพลิเคชั่นที่ใช้แผนที่เหล่านั้น แต่การกำหนดค่าเริ่มต้นคือและCTRL+C=SIGINT CTRL+Z=SIGTSTP
mikeserv

3
Caleb นั้นถูกต้อง (+1) ctrl-Z หยุดโปรแกรมซึ่งคุณควรถือว่าเป็น "หยุด" แต่โปรแกรมนั้นยังคงอยู่ในหน่วยความจำเปิดไฟล์ ฯลฯ ไม่ถูกฆ่า / ยุติ
Olivier Dulac

"หยุดชั่วคราว" อาจชัดเจนกว่า "หยุด"
รัสเซล Borogove

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