İşte iki trap
işleyicileri kaydeden kolay bir kullanım programı ve ardından trap -p
ile görüntüler. Sonra aynı şeyi yapar, ancak çocuk arka plan sürecinde. bash: Neden arka plan kabuğunda SIGINT için bir tuzak kuramıyorum?
SIGINT
tuzak görmezden geliyor?
#!/bin/bash
echo "Traps on startup:"
trap -p
echo ""
trap 'echo "Received INT"' INT
trap 'echo "Received TERM"' TERM
echo "Traps set on parent:"
trap -p
echo ""
(
echo "Child traps on startup:"
trap -p
echo ""
trap 'echo "Child received INT"' INT
trap 'echo "Child received TERM"' TERM
echo "Traps set on child:"
trap -p
echo ""
) &
child_pid=$!
wait $child_pid
Çıktı: (bunlar üzerinde set -m
ile backgrounded sürece)
$ ./show-traps.sh
Traps on startup:
Traps set on parent:
trap -- 'echo "Received INT"' SIGINT
trap -- 'echo "Received TERM"' SIGTERM
Child traps on startup:
Traps set on child:
trap -- 'echo "Child received TERM"' SIGTERM
"set -m" üzerindeki bir parçayı genişletebilir misiniz - ne olduğunu ve nasıl yapılabileceğini? SIGINT'i bir bg sürecine gönderebileceğim bir çözüm arıyorum. Teşekkürler. – drevicko
@revicko Manpage'de 'monitor' ifadesini arayın. Monitör modu ('set -m'), komutların (boru hatları) ayrı işlem gruplarında çalışmasına neden olur. Bunu istemeyebilirsin. Ancak, arka planda gerçekleştirilen bir işlemde bir yürütülebilir dosya çalıştırıyorsanız, SIGINT'i göz ardı eden bir sarmalayıcıdan (başka bir şey yapmadan) başlatmanız önemsizdir. (Eğer bunu nasıl yapacağınızı bilmiyorsanız, araştırmayı akse edin ve kodu postalayacağım.) – PSkocik
Çok teşekkürler! Soru şu: [https://stackoverflow.com/questions/49178556/how-do-i-launch-a-background-process-through-a-wrapper-thatll-undo-the-sigint-i). – drevicko