มีโปรแกรม Linux เช่น vlc ที่แนะนำให้พิมพ์ctrl+ cสองครั้งเพื่อฆ่าการเรียกใช้งานจากเทอร์มินัลหากโปรแกรมไม่หยุดทำงานหลังจากโปรแกรมแรก
เหตุใดการพิมพ์ctrl+ cสองครั้งจึงทำงานไม่ได้ในครั้งแรก
มีโปรแกรม Linux เช่น vlc ที่แนะนำให้พิมพ์ctrl+ cสองครั้งเพื่อฆ่าการเรียกใช้งานจากเทอร์มินัลหากโปรแกรมไม่หยุดทำงานหลังจากโปรแกรมแรก
เหตุใดการพิมพ์ctrl+ cสองครั้งจึงทำงานไม่ได้ในครั้งแรก
คำตอบ:
มันทำอะไรเป็นแอปพลิเคชันที่เฉพาะเจาะจงทั้งหมด เมื่อคุณกดctrl+ cเทอร์มินัลอีมูเลเตอร์จะส่งสัญญาณSIGINTไปยังแอปพลิเคชันเบื้องหน้าซึ่งจะกระตุ้น "ตัวจัดการสัญญาณ" ที่เหมาะสม ตัวจัดการสัญญาณเริ่มต้นสำหรับ SIGINT จะยกเลิกแอปพลิเคชัน แต่โปรแกรมใด ๆ สามารถติดตั้งตัวจัดการสัญญาณของตัวเองสำหรับ SIGINT (รวมถึงตัวจัดการสัญญาณที่ไม่หยุดการทำงานเลย)
เห็นได้ชัดว่าvlcติดตั้งตัวจัดการสัญญาณที่พยายามทำการยกเลิกการล้างข้อมูล / สง่างามในครั้งแรกที่มีการเรียกใช้และกลับไปสู่พฤติกรรมเริ่มต้นของการยุติการดำเนินการทันทีเมื่อมีการเรียกใช้ครั้งที่สอง
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