เหตุใดการพิมพ์ Ctrl + c สองครั้งจึงหยุดกระบวนการทำงานใน Linux


24

มีโปรแกรม Linux เช่น vlc ที่แนะนำให้พิมพ์ctrl+ cสองครั้งเพื่อฆ่าการเรียกใช้งานจากเทอร์มินัลหากโปรแกรมไม่หยุดทำงานหลังจากโปรแกรมแรก

เหตุใดการพิมพ์ctrl+ cสองครั้งจึงทำงานไม่ได้ในครั้งแรก


6
[อ้างจำเป็น]
อิกนาชิโอ Vazquez-Abrams

คำตอบ:


35

มันทำอะไรเป็นแอปพลิเคชันที่เฉพาะเจาะจงทั้งหมด เมื่อคุณกดctrl+ cเทอร์มินัลอีมูเลเตอร์จะส่งสัญญาณSIGINTไปยังแอปพลิเคชันเบื้องหน้าซึ่งจะกระตุ้น "ตัวจัดการสัญญาณ" ที่เหมาะสม ตัวจัดการสัญญาณเริ่มต้นสำหรับ SIGINT จะยกเลิกแอปพลิเคชัน แต่โปรแกรมใด ๆ สามารถติดตั้งตัวจัดการสัญญาณของตัวเองสำหรับ SIGINT (รวมถึงตัวจัดการสัญญาณที่ไม่หยุดการทำงานเลย)

เห็นได้ชัดว่าvlcติดตั้งตัวจัดการสัญญาณที่พยายามทำการยกเลิกการล้างข้อมูล / สง่างามในครั้งแรกที่มีการเรียกใช้และกลับไปสู่พฤติกรรมเริ่มต้นของการยุติการดำเนินการทันทีเมื่อมีการเรียกใช้ครั้งที่สอง


3
ในบางระบบสัญญาณจะถูกเปลี่ยนกลับเป็น SIG_DFL หลังจากการเรียกไปยังตัวจัดการ (เพื่อหลีกเลี่ยงการเรียกตัวจัดการสองครั้งในสัญญาณเดียวกัน); สิ่งนี้เรียกว่าความหมายของ SysV หลายโปรแกรมไม่ได้ตั้งค่าตัวจัดการสัญญาณกลับไปที่การตั้งค่าในโปรแกรมต้นฉบับที่ส่วนท้ายของตัวจัดการ โดยปกติจะเป็นบั๊กโปรแกรม อ่านข้อมูลเพิ่มเติมเกี่ยวกับสัญญาณ (2) manpage
Arcege

16

SIGINTสัญญาณที่ส่งโดยCtrl+ Cตามปกติจะบอกโปรแกรมให้แยกไปที่ลูปการประมวลผลคำสั่งหลักหรือถ้าไม่เหมาะสมก็ให้ออกจากระบบได้อย่างหมดจด บางโปรแกรมรันโพรซีเดอร์การล้างข้อมูลเมื่อได้รับ SIGINT หากโปรแกรมที่เป็น messed เพื่อขึ้นว่าขั้นตอนการทำความสะอาดล้มเหลวในบางโปรแกรมที่สองCtrl+ Cทำให้โปรแกรมที่จะเลิกทันที การทำเช่นนี้ขึ้นอยู่กับผู้สร้างแต่ละโปรแกรม

ถ้าสองCtrl+ Cไม่ได้ฆ่าโปรแกรมลองCtrl+ \ซึ่งจะส่งSIGQUITมีความรุนแรงมากขึ้น ( แต่ยังคงสัญญาณ catchable) หรือลองCtrl+ Zเพื่อระงับโปรแกรมและแล้วkillคำสั่ง (เช่นkill %1ซึ่งจะส่งSIGTERMสัญญาณอัตภาพมีความรุนแรงน้อยกว่า กว่า SIGQUIT ไปยังหมายเลขงาน 1) ถ้าทุกคนอื่นล้มเหลวฆ่าโปรแกรมที่มีkill -KILLยังเป็นที่รู้จักkill -9ส่งสัญญาณ uncatchable SIGKILL

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