/tmp/trap.shПомощь требуется SIGQUIT в Bash
#! /bin/bash
echo parent
trap signalCaught HUP INT QUIT TERM
signalCaught() {
echo "SIGNAL DETECTED I am the parent."
}
SLEEP=10
for i in $(seq $SLEEP -1 0); do
echo "$i"
sleep 1
done
/tmp/trap2.sh 2>&1 | tee -ai /tmp/garbage.txt
echo " --- terminating \"$0\" "
/tmp/trap2.sh
#! /bin/bash
echo child
trap 'echo signal caught in child' HUP INT QUIT TERM
read JUNK
SLEEP=10
echo sleeping for $SLEEP seconds
sleep $SLEEP
echo " --- terminating \"$0\" "
Когда я бегу /tmp/trap.sh, и позволить ему позвонить trap2 .sh, SIGQUIT попадает только в родительский процесс (trap.sh). «Сигнал эха, пойманный в дочернем» не отражается. I предположим, что, что ребенок не поймает SIGQUIT.
Есть ли причина, по которой ребенок не ломает QUIT? Он улавливает INT
Как это доставляется в процесс «корень», а не на переднем плане процесса, то есть тот, который на самом деле умирает, если вас _haven't_ установить обработчик сигнала? И почему он видит другое поведение для SIGINT? Просьба предоставить документацию. – Random832
Спасибо, что оспаривали мое неряшливое мышление. –
Я провел некоторое исследование, и похоже, что что-то связано с группами процессов и сигналами, передаваемыми каждому процессу в группе ... Может ли pstree показывать идентификатор группы процессов для каждого процесса? – Random832