อัปเดต: trapต้องลบSIGคำนำหน้าตามเงื่อนไขแม้ว่าบางเชลล์รองรับ ดูความคิดเห็นด้านล่าง
เครื่องหมาย & "&" รันคำสั่งในพื้นหลังในกระบวนการใหม่ เมื่อกระบวนการหลักของมัน (คำสั่งที่รันสคริปต์ bash ในกรณีของคุณ) สิ้นสุดลงกระบวนการพื้นหลังนี้จะรีเซ็ตกระบวนการหลักเป็น init (ดำเนินการด้วยPID1) แต่จะไม่ตาย เมื่อคุณกดctrl+cคุณกำลังส่งสัญญาณขัดจังหวะไปยังกระบวนการพื้นหน้าและมันจะไม่ส่งผลกระทบต่อกระบวนการพื้นหลัง
เพื่อฆ่ากระบวนการพื้นหลังที่คุณควรใช้killคำสั่งกับของกระบวนการพื้นหลังล่าสุดซึ่งอาจจะได้รับจากPID$!
หากคุณต้องการที่จะใช้ctrl+cเพื่อฆ่าทั้งกระบวนการสคริปต์และพื้นหลังคุณสามารถทำได้:
trap 'kill $BGPID; exit' INT
sleep 1024 & # background command
BGPID=$!
sleep 1024 # foreground command of the script
trapแก้ไขตัวจัดการกับดักของ SIGINT( trapต้องการลบส่วนSIGนำหน้า แต่เชลล์บางตัวอาจสนับสนุนรวมถึง) เพื่อให้สคริปต์จะฆ่ากระบวนการด้วย$BGPIDก่อนที่จะออก