Getting HUPed

KiYun Roe kiyun at mirror.tmc.com
Tue Mar 26 08:49:06 AEST 1991


Thanks to everyone who tried to help me with my problem.  I determined
that the problem was in a call to isatty(0) inside /bin/rm.  To recap,
I have a bunch of shell scripts that start off something like this:

    #! /bin/sh

    type=`expr $0 : '.*x\(.*\)\.sh'`
    exec > x$type.log 2>&1

    trap "rm -f /tmp/p$$.* ; exit" 0 1 2 13 15

If I start one of these off in the background and log back on, I find
that it has gone into an infinite SIGHUP loop.  Apparently, what is
happening is that /bin/rm calls isatty(0) which leads to a SIGHUP,
which the shell traps, which calls /bin/rm, etc.  I'm guessing at this,
but I compiled a version of rm without the isatty(0) call and the
script worked fine.  (BTW, /bin/rm calls isatty to automatically set
the -f option if the input isn't a terminal.  I don't know if that's
standard or unique to Pyramid Unix.)

Some of you suggested that executing exit inside a trap handler would
cause an infinite loop.  Well, it doesn't on my machine, and I can't
see how it would generate Hangup messages which was the most perplexing
part of my problem.  However, I would be interested in knowing if it
really does cause an infinite exit loop under a different version of
Unix.

Anyway, here's the prolog I'm using for this particular class of
scripts now:

    #! /bin/sh

    type=`expr $0 : '.*x\(.*\)\.sh'`
    exec > x$type.log 2>&1

    trap "exec rm -f /usr/tmp/p$$.* < /dev/null" 0 1 2 13 15

I hope the exec will take care of any infinite loops, and redirecting
stdin to /dev/null should keep rm out of trouble.



More information about the Comp.unix.shell mailing list