On Thu, Jan 22, 2009 at 5:58 PM, Nerius Landys <nlan...@gmail.com> wrote:
> Actually, because of the "exec" in the parent script, the line below
> it, the "killing terminator process" line, never gets reached.  So the
> terminator process that waits to kill its parent always waits the full
> 5 seconds in the background.  If I pipe the output of the parent
> script through less, it waits 5 seconds before it reaches the end of
> the output.  That is annoying.  Is there any way to solve that?
>

I see what you mean. Here's another option without exec:

#!/bin/sh -T

kill_all()
{
        echo 'killing everything'
        kill $SPID $CPID 2> /dev/null
        exit 0
}

trap kill_all SIGCHLD

./child &
CPID=$!

sleep 5 &
SPID=$!

echo "child is $CPID"
echo "sleeper is $SPID"
wait

Here I'm using the fact that the termination of any child process
causes SIGCHILD to be sent to the parent. Notice the '-T' in the first
line; this is important, because without it the 'wait' call isn't
interrupted until both children are dead. Unfortunately, this is a
non-standard option, so you'll have to check if it is supported in
your environment.

- Max
_______________________________________________
freebsd-questions@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-questions
To unsubscribe, send any mail to "freebsd-questions-unsubscr...@freebsd.org"

Reply via email to