bug-bash
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

trap problem on bash 4.2


From: sky
Subject: trap problem on bash 4.2
Date: Mon, 21 Mar 2011 21:46:58 +0900

Configuration Information [Automatically generated, do not change]:
Machine: x86_64
OS: linux-gnu
Compiler: gcc
Compilation CFLAGS:  -DPROGRAM='bash' -DCONF_HOSTTYPE='x86_64'
-DCONF_OSTYPE='linux-gnu' -DCONF_MACHTYPE='x86_64-redhat-linux-gnu'
-DCONF_VENDOR='redhat' -DLOCALEDIR='/usr/share/locale'
-DPACKAGE='bash' -DSHELL -DHAVE_CONFIG_H   -I.  -I. -I./include
-I./lib  -D_GNU_SOURCE -DRECYCLES_PIDS  -O2 -g -pipe -Wall
-Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector
--param=ssp-buffer-size=4 -m64 -mtune=generic
uname output: Linux fedora14 2.6.35.10-74.fc14.x86_64 #1 SMP Thu Dec
23 16:04:50 UTC 2010 x86_64 x86_64 x86_64 GNU/Linux
Machine Type: x86_64-redhat-linux-gnu

Bash Version: 4.2
Patch Level: 8
Release Status: release

Description:
        I am a programmer working in Japan.
        I encountered an incompatibility between bash 4.2 and 4.1.

--- cut here ---
#!/bin/bash
# tset_trap.bash

RESET_SIGTERM="$1"
subshell() {
  ID1=$BASH_SUBSHELL
  if [ -n "$RESET_SIGTERM" ] ; then
    #trap "" SIGTERM    ### workaround
    trap - SIGTERM      ### doubt
    echo "reset SIGTERM"
  fi
  ( # exec subshell
    SELF_PID=$!
    [ -n "$BASHPID" ] && SELF_PID=$BASHPID
    local -a p=(`head -1 /proc/$SELF_PID/stat`)
    PARENT=${p[3]}
    ID2=$BASH_SUBSHELL
    echo "ROOT=$ROOT_PID  SUB${ID1}=$PARENT  SUB${ID2}=$SELF_PID"
    grep -H SigIgn /proc/$PARENT/status
    grep -H SigIgn /proc/$SELF_PID/status
    pstree -p $ROOT_PID
  ) &
  wait
}
ROOT_PID=$$
trap "" SIGTERM
grep -H SigIgn /proc/$ROOT_PID/status
subshell | gawk '{printf("%s  %s\n", strftime("%F %T"), $0) ; fflush()}' &
trap - SIGTERM
wait
----------------

Repeat-By:
        Please run 'test_trap.bash' .
        The next is a result on bash 4.2.

# rpm -q bash
bash-4.2.8-1.fc15.x86_64
# ./test_trap.bash 1
/proc/5399/status:SigIgn:       0000000000004004
2011-03-21 21:16:15  reset SIGTERM
2011-03-21 21:16:15  ROOT=5399  SUB1=5401  SUB2=5403
2011-03-21 21:16:15  /proc/5401/status:SigIgn:  0000000000004006
2011-03-21 21:16:15  /proc/5403/status:SigIgn:  0000000000004006
2011-03-21 21:16:15  test_trap.bash(5399)-+-gawk(5402)
2011-03-21 21:16:15
`-test_trap.bash(5401)---test_trap.bash(5403)---pstree(5407)

        We can not reset SIGTERM in subshell.
        On bash 4.1 or older version, we can reset it.
        The next is a result on bash 4.1.

# rpm -q bash
bash-4.1.7-3.fc14.x86_64
# ./test_trap.bash 1
/proc/5634/status:SigIgn:       0000000000004004
2011-03-21 21:24:07  reset SIGTERM
2011-03-21 21:24:07  ROOT=5634  SUB1=5636  SUB2=5638
2011-03-21 21:24:07  /proc/5636/status:SigIgn:  0000000000000006
2011-03-21 21:24:07  /proc/5638/status:SigIgn:  0000000000000006
2011-03-21 21:24:07  test_trap.bash(5634)-+-gawk(5637)
2011-03-21 21:24:07
`-test_trap.bash(5636)---test_trap.bash(5638)---pstree(5642)

        On Linux, we can see signal mask in /proc/<PID>/status.

Best Regards,
s-taka (Satoshi Takahashi)



reply via email to

[Prev in Thread] Current Thread [Next in Thread]