/usr/share/systemtap/examples/process
NameSizeModeActions
auditbt.meta4290644editdlrm
auditbt.stp6220755editdlrm
auditbt.tcl790644editdlrm
chng_cpu.meta7750644editdlrm
chng_cpu.stp10490755editdlrm
chng_cpu.tcl1400644editdlrm
cycle_thief.meta10820644editdlrm
cycle_thief.stp28930755editdlrm
cycle_thief.txt59740644editdlrm
errsnoop.meta5750644editdlrm
errsnoop.stp10150755editdlrm
forktracker.meta5250644editdlrm
forktracker.stp6010755editdlrm
futexes.meta5200644editdlrm
futexes.stp11180755editdlrm
futexes.txt9440644editdlrm
futexes2.meta5930644editdlrm
futexes2.stp20140644editdlrm
ltrace.meta3140644editdlrm
ltrace.stp30070755editdlrm
ltrace.tcl1220644editdlrm
migrate.meta7460644editdlrm
migrate.stp10370755editdlrm
mutex-contention.meta4790644editdlrm
mutex-contention.stp55590755editdlrm
mutex-contention.tcl790644editdlrm
noptrace.meta5120644editdlrm
noptrace.stp22350755editdlrm
noptrace.txt12120644editdlrm
pfiles.meta4500644editdlrm
pfiles.stp245230755editdlrm
plimit.meta3870644editdlrm
plimit.stp30290755editdlrm
procmod_watcher.meta6570644editdlrm
procmod_watcher.stp24060644editdlrm
proctop.meta6010644editdlrm
proctop.stp42450755editdlrm
proctop.txt86540644editdlrm
proc_snoop.stp11330755editdlrm
proc_snoop_parser.xml8180644editdlrm
proc_snoop_parser_instructions.txt21800644editdlrm
psig.meta3540644editdlrm
psig.stp56160755editdlrm
pstrace_exec.meta5450644editdlrm
pstrace_exec.stp4650755editdlrm
pstree.meta4550644editdlrm
pstree.stp19570755editdlrm
rlimit_nofile.meta3190644editdlrm
rlimit_nofile.stp11510755editdlrm
sched-latency.meta4700644editdlrm
sched-latency.stp5080644editdlrm
sched-latency.txt15660644editdlrm
schedtimes.meta8140644editdlrm
schedtimes.stp39490755editdlrm
schedtimes.txt32780644editdlrm
semop-watch.meta2670644editdlrm
semop-watch.stp8220755editdlrm
sigkill.meta5600644editdlrm
sigkill.stp6560755editdlrm
sigmon.meta6690644editdlrm
sigmon.stp9320755editdlrm
sig_by_pid.meta3570644editdlrm
sig_by_pid.stp10780755editdlrm
sig_by_pid.txt15140644editdlrm
sig_by_proc.meta3640644editdlrm
sig_by_proc.stp8510755editdlrm
sig_by_proc.txt9510644editdlrm
sleepingBeauties.meta5810644editdlrm
sleepingBeauties.stp13640755editdlrm
sleepingBeauties.tcl1400644editdlrm
sleeptime.meta6010644editdlrm
sleeptime.stp14690755editdlrm
spawn_seeker.meta8540644editdlrm
spawn_seeker.stp15260755editdlrm
spawn_seeker.txt13180644editdlrm
strace.meta3850644editdlrm
strace.stp20810755editdlrm
strace.txt36720644editdlrm
syscalls_by_pid.meta5140644editdlrm
syscalls_by_pid.stp6330755editdlrm
syscalls_by_pid.txt5970644editdlrm
syscalls_by_proc.meta5310644editdlrm
syscalls_by_proc.stp6920755editdlrm
syscalls_by_proc.txt11300644editdlrm
syscalltimes62910755editdlrm
syscalltimes.meta4540644editdlrm
syscalltimes.txt114590644editdlrm
thread-business.meta3460644editdlrm
thread-business.stp8660755editdlrm
thread-business.txt28230644editdlrm
threadstacks.meta5850644editdlrm
threadstacks.stp17890755editdlrm
threadstacks.tcl790644editdlrm
wait4time.meta6580644editdlrm
wait4time.stp13470755editdlrm
Edit: /usr/share/systemtap/examples/process/ltrace.stp (3007B)
#!/usr/bin/stap // configuration options global follow_fork = 0 // -Gfollow_fork=1 means trace descendant processes too global count = 0 // -Gcount=1 means summarize time and calls for each library call */ global report_line% global report_line_returnval% global func_time% global func_time_total% global func_calls% global calls_nonreturn probe begin { // list of calls that never .return calls_nonreturn["__libc_start_main"]=1 } function filter_p() { // from strace.stp if (target() == 0) return 0; if (!follow_fork && pid() != target()) return 1; if (follow_fork && !target_set_pid(pid())) return 1; return 0; } function arg:string (arg1:long) { if (arg1 < 255) return sprintf("%d", arg1) else return sprintf("%#lx", arg1) } function report (rl) { printf("%s", report_line[rl]) rll = strlen(report_line[rl]) n_tabs = ((64 - rll) / 8) if (rll % 8 == 0) n_tabs -= 1 if (rll <= 64) for (i=0; i < n_tabs; i++) { printf("\t") } } probe process.plt, process.library("*").plt { if (filter_p()) next; if (strlen($$name) == 0) next; if ($$name in calls_nonreturn) next if (count) // -Gcount=1 { func_calls[$$name] <<< 1 func_time[$$name]=gettimeofday_us() next } %( arch == "x86_64" %? outline = sprintf("%s (%s, %s, %s, %s)", $$name, arg(register("rdi")), arg(register("rsi")), arg(register("rdx")), arg(register("rcx"))) %) %( arch == "i386" %? outline = sprintf("%s[%d] %s (%s, %s, %s, %s)", execname(), tid(), $$name, arg(register("edi")), arg(register("esi")), arg(register("edx")), arg(register("ecx"))) %) report_line[$$name] = outline } probe process.plt.return, process.library("*").plt.return { if (filter_p()) next; if (strlen($$name) == 0) next; // cache cumulative time spent in each call if (count) { now = gettimeofday_us() then = func_time[$$name] func_time_total[$$name] += now-then delete func_time[$$name] next } report_line_returnval[$$name] = arg(retval) foreach (rl in report_line) { first_key = rl break } // if we have nested calls then wait for the return of the first call if ($$name == first_key) { foreach (rl in report_line) { report (rl) printf ("=%s\n", report_line_returnval[rl]) } delete report_line delete report_line_returnval } } probe end { if (count) { cumulative_time = 0 printf ("%% time seconds calls\n") printf ( "------ --------- -------\n") foreach (ttt in func_time_total) { cumulative_time += func_time_total[ttt] } foreach (ttt in func_time_total) { percent = (func_time_total[ttt] * 100) / cumulative_time if (percent > 0) { printf("%5d%% ", percent) printf("%14d ", func_time_total[ttt]%1000000) printf("%10d ", @count(func_calls[ttt])) printf(" %s\n",ttt) } } } }