With the older version, the trap can check the pid against $! since $! is
set to the process that exited.  With ksh93v you get more information
available in the trap.



On Tue, Oct 8, 2013 at 5:13 PM, Roland Mainz <[email protected]>wrote:

> On Tue, Oct 8, 2013 at 5:02 PM, Peter Hitchman <[email protected]>
> wrote:
> > On 6 October 2013 13:44, Cedric Blancher <[email protected]>
> wrote:
> >> On 6 October 2013 10:36, Peter Hitchman <[email protected]>
> wrote:
> >> > Hi
> >> > I am using Version JM 93t+ 2010-06-21 on RHL4.
> >> > I have been playing around with a co-process and what happens when the
> >> > co-process dies.
> >> > What I have found is that to have any control I have to catch SIGPIPE
> in
> >> > a
> >> > function,
> >> > but that I cannot then continue processing outside of this function,
> all
> >> > I
> >> > can do is exit the script.
> >> >
> >> > Is this the right way to do it?
> >>
> >> Do you have any example code which shows what you are trying to do?
> >
> > OK I'll work up a simple example, what I have now is to much to post.
> > The background is that I am connecting to an Oracle database using
> sqlplus
> > as a co-process and seeing what happens when for some reason the db
> > connection goes away. I found that I had to trap SIGPIPE.
>
> Erm... does the example below help somehow (it requires a newer
> ksh93v- version since .sh.sig is a new feature in that version) ?
> -- snip --
> $ ksh -x -c 'builtin pids ; trap "print -v .sh.sig ; kill -l
> \${.sh.sig.status}" CHLD ; { thispid=${ pids -f "%(pid)d" ; } ; kill
> -s ABRT $thispid ; } & ; wait ; print $? ; true'
> + builtin pids
> + trap 'print -v .sh.sig ; kill -l ${.sh.sig.status}' CHLD
> + wait
> + pids -f '%(pid)d'
> + thispid=1966
> + kill -s ABRT 1966
> + print -v .sh.sig
> (
>         typeset -r -l -i 16 addr=16#3e8000007ae
>         typeset -r -l -i band=0
>         typeset -r code=KILLED
>         typeset -r -i errno=0
>         typeset -r name=CHLD
>         typeset -r -i pid=1966
>         typeset -r -i signo=17
>         typeset -r -i status=6
>         typeset -r -i uid=1000
>         value=(
>                 typeset -r -i q=6
>                 typeset -r -l -u -i Q=6
>         )
> )
> + kill -l 6
> ABRT
> + print 1
> 1
> + true
> -- snip --
>
> ... it shows a process child killing itself using SIGABORT (kill -s
> ABRT and uses the pids(1) builtin to figure out the process id of the
> child process) and the CHLD trap first prints the contents of the
> .sh.sig compound variable (which is ksh93's variation of the POSIX
> siginfo data) and then uses the .sh.sig.signo variable to figure out
> which signal (or better: The name of the signal which...) killed the
> child process (using $ kill -l ${signal_number} #).
>
> ----
>
> Bye,
> Roland
>
> --
>   __ .  . __
>  (o.\ \/ /.o) [email protected]
>   \__\/\/__/  MPEG specialist, C&&JAVA&&Sun&&Unix programmer
>   /O /==\ O\  TEL +49 641 3992797
>  (;O/ \/ \O;)
> _______________________________________________
> ast-users mailing list
> [email protected]
> http://lists.research.att.com/mailman/listinfo/ast-users
>
_______________________________________________
ast-users mailing list
[email protected]
http://lists.research.att.com/mailman/listinfo/ast-users

Reply via email to