bug-bash
[Top][All Lists]
Advanced

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

Re: Turning off job control doesn't make async jobs ignore SIGINT


From: Chet Ramey
Subject: Re: Turning off job control doesn't make async jobs ignore SIGINT
Date: Tue, 25 Sep 2007 21:42:06 -0400
User-agent: Thunderbird 2.0.0.6 (Macintosh/20070728)

AnMaster wrote:
> Configuration Information [Automatically generated, do not change]:
> Machine: x86_64
> OS: linux-gnu
> Compiler: x86_64-pc-linux-gnu-gcc
> Compilation CFLAGS:  -DPROGRAM='bash' -DCONF_HOSTTYPE='x86_64' 
> -DCONF_OSTYPE='linux-gnu' -DCONF_MACHTYPE='x86_64-pc-linux-gnu' 
> -DCONF_VENDOR='pc' -DLOCALEDIR='/usr/share/locale' -DPACKAGE='bash' -DSHELL 
> -DHAVE_CONFIG_H   -I.  -I. -I./include -I./lib   -march=k8 -pipe -O2 -msse3
> uname output: Linux tux 2.6.22-gentoo-r5 #1 Mon Aug 27 18:24:02 CEST 2007 
> x86_64 AMD Sempron(tm) Processor 3300+ AuthenticAMD GNU/Linux
> Machine Type: x86_64-pc-linux-gnu
> 
> Bash Version: 3.2
> Patch Level: 17
> Release Status: release
> 
> Description:
> From man bash:
>        Non-builtin  commands  run by bash have signal handlers set to the 
> values inherited by the shell from its parent.
>        When job control is not in effect, asynchronous commands ignore SIGINT 
> and SIGQUIT in addition to these inherited
>        handlers.   Commands  run  as  a result of command substitution ignore 
> the keyboard-generated job control signals
>        SIGTTIN, SIGTTOU, and SIGTSTP.
> 
> This doesn't seem to be the case. When job control is not in effect, async 
> jobs still get SIGINT sent to them even if
> SIGINT is sent to the main process.

I can't reproduce this with bash-3.2.25 on Mac OS X.  Using the following
somewhat simplified version of your script:

set +m
echo $$

trap 'echo INT; ps auxww | grep $pid ; echo QUIT >&4' INT

{
trap 'echo subshell INT; exit 1' INT;
sleep 100
} &
pid=$!

exec 4>/tmp/OUT

wait
echo after wait

cat /tmp/OUT

kill -0 $pid
kill $pid

rm -f /tmp/OUT
exit 0

I get some variation of the following output whether I use ^C or send
SIGINT from another shell:

19591
INT
chet     19592   0.0 -0.0    29232    404  p1  S+    9:35PM   0:00.00
../bash-3.2-patched/bash ./x3
chet     19595   0.0 -0.0    27372    428  p1  S+    9:35PM   0:00.01 grep
19592
after wait
QUIT
./x3: line 22: 19592 Terminated              { trap 'echo subshell INT;
exit 1' INT; sleep 100; }

A system call tracer would probably give you more insight into what's
happening to your script.  If I had to guess, I'd guess that nc is
terminating because the process at the other end of the named pipe
terminates before nc reads from it.

Chet
-- 
``The lyf so short, the craft so long to lerne.'' - Chaucer
                       Live Strong.  No day but today.
Chet Ramey, ITS, CWRU    chet@case.edu    http://cnswww.cns.cwru.edu/~chet/




reply via email to

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