Angelo Rajadurai wrote:
Hey Pete:
If you need to look at processes that are in the process tree of a given process. (ie) child of a child process etc, then you can use the progenyof() action.
You would replace the predicate /ppid == $target/ by /progenyof($target)/
HTHs
Angelo
An example of which might be :
$ more rac1.d
#pragma D option destructive
syscall::*fork*:return
/progenyof($target) && pid!=$target/
{
stop();
printf("%s, %d, %d", execname, pid, curpsinfo->pr_ppid);
system("/rayh/t_open.d %d &", pid);
exit(0);
}
and t_open.d looks like:
$ more t_open.d
#!/usr/sbin/dtrace -Fs
#pragma D option destructive
#pragma D option flowindent
BEGIN
{
printf("prun'ing process %d\n", $1);
system("prun %d\n", $1);
}
pid$1::mdmn_resume:entry
{
self->follow = 1;
}
pid$1::_tx_open:entry
/self->follow/
{
self->path = arg0;
printf("%s\n", stringof(copyinstr(self->path)));
}
pid$1::_tx_open:return
/self->follow && (int)arg0 == -1/
{
printf("errno : %d\n", errno);
ustack();
}
pid$1::mdmn_resume:return
{
self->follow = 0;
}
I would also advise taking a look at the Sun Developer pages on sunsolve
or bigadmin if you have such access.
Hope this is what you are looking for
ray
On Nov 19, 2009, at 3:15 PM, Peter Shoults wrote:
On 11/19/09 15:00, michael schuster wrote:
Peter Shoults wrote:
I suspect it is to stop the child process before it goes and does
whatever it is that we might want to capture.
right - not everything "in" dtrace happens synchronously (ie not all
actions are executed at the time the probe fires - an example for that
are the repeated reports of "I see hex numbers instead of symbols
reported"), and stop makes sure the child process doesn't go and do
all the interesting work before dtrace gets instrumentation in place -
or so I understand it.
Michael
Ok - but how does one get that going again.....
Here is what I believe is my scenario....
PROC1 forks PROC2
PROC2 forks several other procs (I believe I am not interested in any of
these, but not 100% certain)
meanwhile...
PROC1 forks PROC3 (this I believe is the proc I am interested in)
What I want to be able to do is trace all the forked processes, but
especially PROC3. I have found I can not use the self-> thread local
variable. Wondering about setting an array to store ppid to predicate
on, but then I can't think of how to get to predicate on an array of
unknown number of variables.
Pete
_______________________________________________
dtrace-discuss mailing list
dtrace-discuss@opensolaris.org
_______________________________________________
dtrace-discuss mailing list
dtrace-discuss@opensolaris.org
_______________________________________________
dtrace-discuss mailing list
dtrace-discuss@opensolaris.org