[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
trap behaviour different depending on stdio redirection?
From: |
Charles Smith |
Subject: |
trap behaviour different depending on stdio redirection? |
Date: |
Wed, 13 Mar 2013 06:55:28 -0700 (PDT) |
Hi, I have the following script, which just kills itself.
It sets a trap, but only takes it if the output is not redirected.
Can anybody explain to me why?
$ cat test17
#!/usr/bin/env bash
trap "echo caught signal 2" 2
trap -p
# show the process group
ps -eo pid,pgid,cmd | grep $$
# send the signal to the process group
kill -2 -$$
rc=$?
if [ $rc -ne 0 ]; then
echo "$0: kill failed: $rc" >&2
fi
echo done.
When I run it without stdio redirection, I get this output:
$ bash -x test17
+ trap 'echo caught signal 2' 2
+ trap -p
trap -- 'echo caught signal 2' SIGINT
+ ps -eo pid,pgid,cmd
+ grep 8711
8711 8711 bash -x test17
8712 8711 ps -eo pid,pgid,cmd
8713 8711 grep 8711
+ kill -2 -8711
++ echo caught signal 2
caught signal 2
+ rc=0
+ '[' 0 -ne 0 ']'
+ echo done.
done.
When I run it with stdio redirection, the script is terminated at the kill:
$ bash -x test17 2>&1 | tee 0312-29.out
+ trap 'echo caught signal 2' 2
+ trap -p
trap -- 'echo caught signal 2' SIGINT
+ grep 8714
+ ps -eo pid,pgid,cmd
8714 8714 bash -x test17
8715 8714 tee 0312-29.out
8716 8714 ps -eo pid,pgid,cmd
8717 8714 grep 8714
$ echo $?
130
The same thing happens if I use signal 10 instead of 2:
$ bash -x test18
+ trap 'echo caught signal 10' 10
+ trap -p
trap -- 'echo caught signal 10' SIGUSR1
+ ps -eo pid,pgid,cmd
+ grep 8773
8773 8773 bash -x test18
8774 8773 ps -eo pid,pgid,cmd
8775 8773 grep 8773
+ kill -10 -8773
++ echo caught signal 10
caught signal 10
+ rc=0
+ '[' 0 -ne 0 ']'
+ echo done.
done.
$ bash -x test18 2>&1 | tee 0312-34.out
+ trap 'echo caught signal 10' 10
User defined signal 1
13810~/w/1670/bin>bash -x test18 2>&1 | tee 0312-34.out
+ trap 'echo caught signal 10' 10
+ trap -p
trap -- 'echo caught signal 10' SIGUSR1
+ grep 8784
+ ps -eo pid,pgid,cmd
8784 8784 bash -x test18
8785 8784 tee 0312-34.out
8786 8784 ps -eo pid,pgid,cmd
8787 8784 grep 8784
$ echo $?
138