Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 19 Sep 2011 16:03:42 +0000 (UTC)
From:      Anton Yuzhaninov <citrin@citrin.ru>
To:        freebsd-current@freebsd.org
Subject:   Re: truss
Message-ID:  <j57p4t$8u8$1@dough.gmane.org>
References:  <4E5E46A4.3060705@citrin.ru> <4E6A99A9.1000204@delphij.net> <j4pgu9$m94$1@dough.gmane.org> <864o0adkva.fsf@kopusha.home.net> <j57bm4$3lk$1@dough.gmane.org> <86mxe0r8o5.fsf@in138.ua3> <j57lef$a3d$1@dough.gmane.org>

next in thread | previous in thread | raw e-mail | index | archive | help
On Mon, 19 Sep 2011 15:00:31 +0000 (UTC), Anton Yuzhaninov wrote:
AY> On Mon, 19 Sep 2011 15:58:02 +0300, Mikolaj Golub wrote:
 AY>>> ktrace -i for truss sleep 5
 AY>>> http://dl.dropbox.com/u/8798217/tmp/truss_ktrace2.txt
MG>> 
MG>> Although ptrace(PT_TRACE_ME,0,0,0) returned 0 the process did not stop after
MG>> execve() and wait4() in parent (which was actually waiting for this stop)
MG>> returned only after the child exit. No I idea why so far :-).
MG>> 
AY> 
AY> As I understand SIGTRAP used to stop child process after execve(), but
AY> this signal ignored:
AY> 
AY> citrin:~> sleep 300 &
AY> citrin:~> procstat -i 1991 | fgrep TRAP
AY>  1991 sleep            TRAP     -I-
AY> 
AY> Under FreeBSD 8, where ptrace works for me, this signal is not ignored:
AY> x:~> sleep 300 &
AY> x:~> procstat -i 78716 | fgrep TRAP
AY> 78716 sleep            TRAP     ---

SIGTRAP is ignored by X window manager used by me, and this is inherited across
forks/execs up to the truss.

IMHO truss should restore default signal handler for SIGTRAP.

With this patch truss works for me:

--- usr.bin/truss/main.c        (revision 225504)
+++ usr.bin/truss/main.c        (working copy)
@@ -255,6 +255,11 @@ main(int ac, char **av)

        if (trussinfo->pid == 0) {      /* Start a command ourselves */
                command = av;
+               /*
+                * SIGTRUP used to stop traced process after execve
+                * un-ignore this signal (it can be ignored by parents)
+                */
+               signal(SIGTRAP, SIG_DFL);
                trussinfo->pid = setup_and_wait(command);
                signal(SIGINT, SIG_IGN);
                signal(SIGTERM, SIG_IGN);

-- 
 Anton Yuzhaninov




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?j57p4t$8u8$1>