ฉันมีซีดีสดที่บูทเข้าสู่ Linux และรันสคริปต์ Bash ขนาดเล็ก สคริปต์ค้นหาและเรียกใช้โปรแกรมที่สอง (ซึ่งมักจะเป็นไบนารี C ++ ที่คอมไพล์แล้ว)
คุณควรจะสามารถที่จะยกเลิกโปรแกรมที่สองโดยการกด+Ctrl Cสิ่งที่ควรเกิดขึ้นก็คือโปรแกรมที่สองหยุดทำงานและสคริปต์ Bash ยังคงทำงานต่อไป สิ่งที่เกิดขึ้นจริงคือทั้งแอปพลิเคชันหลักและสคริปต์ Bash ยุติ ซึ่งเป็นปัญหา
ดังนั้นฉันจึงใช้trap
builtin เพื่อบอก Bash ให้เพิกเฉย SIGINT และตอนนี้Ctrl+ Cยกเลิกแอปพลิเคชัน C ++ แต่ Bash ยังคงทำงานต่อไป ยิ่งใหญ่
โอ้ใช่ ... บางครั้ง "แอปพลิเคชั่นที่สอง" เป็นสคริปต์ Bash อื่น และในที่กรณีCtrl+ Cตอนนี้จะไม่มีอะไร แต่อย่างใด
เห็นได้ชัดว่าฉันเข้าใจว่าสิ่งนี้ทำงานอย่างไร ... ฉันจะควบคุมกระบวนการใดที่จะได้รับ SIGINT เมื่อผู้ใช้กดCtrl+ C? ฉันต้องการนำสัญญาณนี้ไปยังกระบวนการที่ระบุเพียงกระบวนการเดียว
set -m
แต่คุณสามารถเปิดใช้งานได้ด้วย มันค่อนข้างสะอาดและง่ายกว่าการใช้setsid
ทุกครั้งที่คุณเป็นเด็ก