tee -ai /tmp/garbage.txt
ловит SIGQUIT
. Так, например, когда работают и trap.sh
, и trap2.sh
, у вас есть что-то вроде:
% pstree 62655
-+= 62655 nicholas -zsh
\-+= 62867 nicholas /bin/bash ./trap.sh
|--- 62889 nicholas /bin/bash /tmp/trap2.sh
\--- 62890 nicholas tee -ai /tmp/garbage.txt
Когда я нажимаю ^\
, он доставляется к нижней части дерева (pid 62890):
% sudo dtrace -n 'proc:::signal-send /pid/ { printf("%s -%d %d",execname,args[2],args[1]->pr_pid); }'
dtrace: description 'proc:::signal-send ' matched 1 probe
CPU ID FUNCTION:NAME
1 19556 sigprocmask:signal-send Terminal -3 62890
Если я явно kill -QUIT 62889
, то он действительно печатает signal caught in child
.
(Спасибо комментатору за то, что заставил меня оспорить мои предположения: мой предыдущий ответ здесь был полностью неверным.)
Как упоминает @ Random832, для доставки сигналов используются группы процессов. В выводе pstree =
указывает лидера группы процессов. Вы также можете видеть с выходом ps -j
, trap.sh
, trap2.sh
и tee -ai ...
в одной группе:
% pstree 64261
-+= 64261 nicholas -zsh
\-+= 64551 nicholas /bin/bash ./trap.sh
|--- 64554 nicholas /bin/bash /tmp/trap2.sh
\--- 64555 nicholas tee -ai /tmp/garbage.txt
% ps -jxp 64261,64551,64554,64555
USER PID PPID PGID SESS JOBC STAT TT TIME COMMAND
nicholas 64261 64260 64261 90c3998 1 S s002 0:00.12 -zsh
nicholas 64551 64261 64551 90c3998 1 S+ s002 0:00.01 /bin/bash ./trap.sh
nicholas 64554 64551 64551 90c3998 1 S+ s002 0:00.00 /bin/bash /tmp/trap2.sh
nicholas 64555 64551 64551 90c3998 1 S+ s002 0:00.00 tee -ai /tmp/garbage.txt