/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/proctop.stp (4245B)
#!/usr/bin/stap global processes, stime, virtmem, rssmem, shrmem, utime, proc_state global tot_intervals, sec_counter // configuration options: // -G sort=[pid|process|state|virtmem|rssmem|shrdmem|stime|utime] // -G sortdir=[increase|decrease] // -G show=# // -G interval=# // -G clear_screen=[y|n] global sort="stime", sortdir="decrease", show=25, interval=5, clear_screen="n" probe scheduler.ctxswitch { //don't let the process name get overwritten if (processes[prev_pid] == "" || prev_task_name != "") processes[prev_pid] = prev_task_name if (task_stime() > stime[prev_pid]){ stime[prev_pid] = task_stime() utime[prev_pid] = task_utime() virtmem[prev_pid] = proc_mem_size(prev_pid) rssmem[prev_pid] = proc_mem_rss(prev_pid) shrmem[prev_pid] = proc_mem_shr(prev_pid) } // update the state if we've encountered the process before if (processes[prev_pid] != "") proc_state[prev_pid] = prevtsk_state } probe scheduler.process_exit { proc_state[pid] = 65 } function print_pid_info (proc_pid){ // calc the state of the process if (proc_state[proc_pid] == 0) state = "R" else if (proc_state[proc_pid] == 1) state = "S" else if (proc_state[proc_pid] == 2) state = "D" else if (proc_state[proc_pid] == 4 || proc_state[proc_pid] == 8) state = "T" else if (proc_state[proc_pid] == 16) state = "Z" else if (proc_state[proc_pid] == 32) state = "EXIT_DEAD" else if (proc_state[proc_pid] == 65) state = "DEAD" else state = "DEAD" // let's assume the worst printf("%8d %20s %10s %12d %12d %12d %16d %16d\n", proc_pid, processes[proc_pid], state, virtmem[proc_pid] * mem_page_size(), rssmem[proc_pid] * mem_page_size(), shrmem[proc_pid] * mem_page_size(), stime[proc_pid], utime[proc_pid]) } function print_info (){ tot_processes = 0; // count the number of processes foreach ([a] in processes) tot_processes ++; if (clear_screen == "y") ansi_clear_screen() else println(); printf("%d seconds: showing %d out of %d tasks\n", tot_intervals*interval, ((show>tot_processes) ? tot_processes : show), tot_processes) printf("%8s %20s %10s %12s %12s %12s %16s %16s\n", "PID", "Process", "State", "VirtMem", "RSSMem", "ShrdMem", "CPU Time", "User Time") if (sortdir == "increase") { if (sort == "pid") foreach ([proc_pid+] in processes limit show) print_pid_info(proc_pid) if (sort == "process") foreach ([proc_pid] in processes+ limit show) print_pid_info(proc_pid) if (sort == "state") foreach ([proc_pid] in proc_state+ limit show) print_pid_info(proc_pid) if (sort == "virtmem") foreach ([proc_pid] in virtmem+ limit show) print_pid_info(proc_pid) if (sort == "rssmem") foreach ([proc_pid] in rssmem+ limit show) print_pid_info(proc_pid) if (sort == "shrdmem") foreach ([proc_pid] in shrmem+ limit show) print_pid_info(proc_pid) if (sort == "stime") foreach ([proc_pid] in stime+ limit show) print_pid_info(proc_pid) if (sort == "utime") foreach ([proc_pid] in utime+ limit show) print_pid_info(proc_pid) } else if (sortdir == "decrease") { if (sort == "pid") foreach ([proc_pid-] in processes limit show) print_pid_info(proc_pid) if (sort == "process") foreach ([proc_pid] in processes- limit show) print_pid_info(proc_pid) if (sort == "state") foreach ([proc_pid] in proc_state- limit show) print_pid_info(proc_pid) if (sort == "virtmem") foreach ([proc_pid] in virtmem- limit show) print_pid_info(proc_pid) if (sort == "rssmem") foreach ([proc_pid] in rssmem- limit show) print_pid_info(proc_pid) if (sort == "shrdmem") foreach ([proc_pid] in shrmem- limit show) print_pid_info(proc_pid) if (sort == "stime") foreach ([proc_pid] in stime- limit show) print_pid_info(proc_pid) if (sort == "utime") foreach ([proc_pid] in utime- limit show) print_pid_info(proc_pid) } if (clear_screen != "y") println("-----------------------------------------------------------------------------------------------------------------") } probe timer.s(1) { if (++sec_counter >= interval){ tot_intervals++ print_info() sec_counter = 0; } }