NetBSD-Users archive

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

Re: sh won't trap SIGHUP while waiting for jobs



On 8/20/15 4:36 PM, J. Lewis Muir wrote:
> Hello, NetBSD Users!
>
> I can't get /bin/sh to trap the SIGHUP signal on amd64 NetBSD
> 6.1_STABLE.  Does anyone know why?
>
> Here's a test program exhibiting the behavior:
>
> === test-program ===
> #!/bin/sh
>
> trap 'echo SIGHUP; exit 1' 1
>
> sleep 3600 &
> wait
> ====================

I have now tested trapping SIGINT, SIGQUIT, SIGPIPE, and SIGTERM too,
and of those, only SIGINT causes the program to exit.  Here's the new
test program I used:

=== test-program2 ===
#!/bin/sh

trap 'echo SIGHUP; exit 1' 1
trap 'echo SIGINT; exit 1' 2
trap 'echo SIGQUIT; exit 1' 3
trap 'echo SIGPIPE; exit 1' 13
trap 'echo SIGTERM; exit 1' 15

sleep 3600 &
wait
=====================

As I said, nothing happens when I send the signals, with the exception
of SIGINT which causes the program to exit.  Interestingly, when I
interrupt the program by pressing Ctrl-C in the terminal, I get two
lines of output: one for the signal I sent that seemed to do nothing and
the other for the SIGINT sent by pressing Ctrl-C.  Here's the output
for the five cases in order (SIGHUP, SIGINT, SIGQUIT, SIGPIPE, SIGTERM)
including where I pressed Ctrl-C for each case except SIGINT:

=== test-program2 terminal ===
$ ./test-program2
^CSIGHUP
SIGINT
$ ./test-program2
SIGINT
$ ./test-program2
^CSIGINT
SIGQUIT
$ ./test-program2
^CSIGINT
SIGPIPE
$ ./test-program2
^CSIGINT
SIGTERM
==============================

I'm worried I'm rediscovering some basic behavior that is a surprise to
me but not to many others.  Is this the right behavior for waiting on
jobs?  Why does a trap for SIGINT work while waiting in the wait command
but a trap for the other signals does not?

Thank you!

Lewis


Home | Main Index | Thread Index | Old Index