2
เหตุใดจึงไม่ทุบตีในขณะที่ออกจากวงเมื่อท่อไปที่คำสั่งย่อยที่ถูกยกเลิก?
ทำไมคำสั่งด้านล่างจึงไม่ออก? แทนที่จะออกจากการวนซ้ำจะวิ่งไปเรื่อย ๆ ในขณะที่ฉันค้นพบพฤติกรรมนี้โดยใช้การตั้งค่าที่ซับซ้อนมากขึ้นรูปแบบที่ง่ายที่สุดของคำสั่งจะลดลงไปดังต่อไปนี้ ไม่ออก: while /usr/bin/true ; do echo "ok" | cat ; done | exit 1 ไม่มีการพิมพ์ผิดด้านบน แต่ละ '|' เป็นท่อ 'ทางออก 1' ย่อมาจากกระบวนการอื่นที่วิ่งและออก ฉันคาดว่า "exit 1" จะทำให้เกิด SIGPIPE ในขณะที่ลูป (เขียนบนไพพ์ที่ไม่มีตัวอ่าน) และเพื่อให้ลูปแตกออก แต่การวนซ้ำยังคงทำงานอยู่ เหตุใดคำสั่งจึงไม่หยุด