Greetings to everyone. I wrote a script to calculate how much time is spent on the system calls originating from a specific executable:
#!/usr/sbin/dtrace -s /* * Generate table statistics on how much time is spent on every system call, * for a given program (its name is assigned to $1). */ #pragma D option quiet syscall:::entry /execname == $1/ { self->sstart = timestamp; } syscall:::return /execname == $1/ { @timestats[probefunc] = avg(timestamp - self->sstart); @cntstats[probefunc] = count(); self->sstart = 0; } tick-1sec { printf("%20s | %20s | %5s\n", "Function", "<ns> over 1-sec period", "Count"); printa("%20s %...@d %...@d\n", @timestats, @cntstats); printf("\n"); } Here's the deal: 1. If I leave $1 without double quotes " and the execname I pass has a dot in it, it (accidentally?) works ok: $ pfexec ./temp.sh ... In another terminal: $ pfexec ./lala.d temp.sh Function | <ns> over 1-sec period | Count getgid 873 2 getuid 981 2 umask 1032 2 sysconfig 1077 9 getrlimit 1279 1 llseek 1290 4 gtime 1365 1 getpid 1437 25 2. If I leave $1 without double quotes " and the execname doesn't have a dot in it, it fails with: $ pfexec ./lala.d temp dtrace: failed to compile script ./lala.d: line 11: failed to resolve temp: Unknown variable name 3. If I surround $1 with double quotes, it fails not matter what the supplied argument is: $ pfexec ./lala.d temp.sh dtrace: failed to compile script ./lala.d: line 31: extraneous argument 'temp.sh' ($1 is not referenced) $ pfexec ./lala.d temp dtrace: failed to compile script ./lala.d: line 31: extraneous argument 'temp' ($1 is not referenced) I guess that I'm wrong in all 3 cases, but just being lucky in 1). How could I pass an argument (possibly containing spaces) to dtrace script and use that as a predicate for execname ? Best regards, Stathis _______________________________________________ dtrace-discuss mailing list dtrace-discuss@opensolaris.org