ฉันมีสคริปต์ต่อไปนี้:
#!/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
(เชลล์ในตัว)