bug-bash
[Top][All Lists]
Advanced

[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


reply via email to

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