Re: truss issue

From: Doug White <dwhite_at_gumbysoft.com>
Date: Mon, 15 Dec 2003 08:50:45 -0800 (PST)
On Mon, 15 Dec 2003, Maxim Konovalov wrote:

> > I found current truss behaviour a bit strange. It coredumps always if
> > trussed process do without any significant reason for my understanding.
> > I also confused with comment for commit originally introduced this
> > functionality
> > http://www.freebsd.org/cgi/cvsweb.cgi/src/usr.bin/truss/main.c.diff?r1=1.9&r2=1.10.
> > I propose patch attached to make truss always return result of trussed
> > process and do not kill() itself. What do you think about it?
>
> As a matter of fact, bin/58970 is a backout of rev.1.10 truss/main.c:
>
> ----------------------------
> revision 1.10
> date: 1998/08/24 10:17:20;  author: cracauer;  state: Exp;  lines: +9 -1
> When exiting on SIGINT, exit with signal status
> =============================================================================
>
> But a code does not match the comment and does something funny:
>
> _at__at_ -216,6 +217,7 _at__at_
>         break;
>        case S_SIG:
>         fprintf(outfile, "SIGNAL %lu\n", pfs.val);
> +       sigexit = pfs.val;
>         break;
>        case S_EXIT:
>         fprintf (outfile, "process exit, rval = %lu\n", pfs.val);
> _at__at_ -232,5 +234,11 _at__at_
>      if (ioctl(Procfd, PIOCCONT, val) == -1)
>        warn("PIOCCONT");
>    } while (pfs.why != S_EXIT);
> +  if (sigexit) {
> +    if (sigexit == SIGQUIT)
> +      exit(sigexit);
> +    (void) signal(sigexit, SIG_DFL);
> +    (void) kill(getpid(), sigexit);
> +  }
>    return 0;
>  }
>
> Gentlemen, does anobody know what is going on there?

My reading of it is that it is truss hitting itself with the same signal
that killed the process that it was tracing so that truss will exit
showing that it was killed by a signal. So this is actually implementing
the requested functionality.  Processes that exit due to a signal don't
return an exit code.  It seems keyed on 'sigexit' whatever that is.

SIGQUIT seems to be an exception.

Hwever there maybe a bug since sigexit isn't cleared on every loop so it
may be retaining a previous value and showing a signal exit when there
hasn't been one.

-- 
Doug White                    |  FreeBSD: The Power to Serve
dwhite_at_gumbysoft.com          |  www.FreeBSD.org
Received on Mon Dec 15 2003 - 07:50:47 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:37:34 UTC