ฉันมีสคริปต์ต่อไปนี้:
#!/bin/bash
echo "We are $$"
trap "echo HUP" SIGHUP
cat # wait indefinitely
เมื่อฉันส่งSIGHUP(ใช้kill -HUP pid) ไม่มีอะไรเกิดขึ้น
ถ้าฉันเปลี่ยนสคริปต์เล็กน้อย:
#!/bin/bash
echo "We are $$"
trap "kill -- -$BASHPID" EXIT # add this
trap "echo HUP" SIGHUP
cat # wait indefinitely
... จากนั้นสคริปต์ก็ทำecho HUPสิ่งที่ถูกต้องทันทีที่ออก (เมื่อฉันกด Ctrl + C):
roger@roger-pc:~ $ ./hupper.sh
We are 6233
^CHUP
เกิดอะไรขึ้น? ฉันจะส่งสัญญาณ (ไม่จำเป็นต้องมีSIGHUP) ไปยังสคริปต์นี้ได้อย่างไร
while true; do read; doneในท้ายที่สุดมิฉะนั้นการป้อนข้อความทำให้เลิกเช่นกันและฉันต้องการให้เลิกกับ Ctrl + C
catกระบวนการเสร็จสิ้น ลองใช้สคริปต์ต้นฉบับของคุณแล้วกดCtrl+Dเพื่อทำให้catกระบวนการหยุดทำงาน ขณะที่catกระบวนการอยู่เบื้องหน้าHUPสัญญาณจะไม่ทำงาน ลองใหม่อีกครั้งโดยcatแทนที่ด้วยread(เชลล์ในตัว)