15bf5ca77SDevin Teske# -*- tab-width: 4 -*- ;; Emacs 25bf5ca77SDevin Teske# vi: set filetype=sh tabstop=8 shiftwidth=8 noexpandtab :: Vi/ViM 35bf5ca77SDevin Teske############################################################ IDENT(1) 45bf5ca77SDevin Teske# 55bf5ca77SDevin Teske# $Title: dwatch(8) module for dtrace_proc(4) activity $ 65bf5ca77SDevin Teske# $Copyright: 2014-2018 Devin Teske. All rights reserved. $ 75bf5ca77SDevin Teske# 85bf5ca77SDevin Teske############################################################ DESCRIPTION 95bf5ca77SDevin Teske# 105bf5ca77SDevin Teske# Display process activity 115bf5ca77SDevin Teske# 125bf5ca77SDevin Teske############################################################ PROBE 135bf5ca77SDevin Teske 145bf5ca77SDevin Teskecase "$PROFILE" in 155bf5ca77SDevin Teskeproc) 165bf5ca77SDevin Teske : ${PROBE:=$( echo \ 175bf5ca77SDevin Teske proc:::create, \ 185bf5ca77SDevin Teske proc:::exec, \ 195bf5ca77SDevin Teske proc:::exec-failure, \ 205bf5ca77SDevin Teske proc:::exec-success, \ 215bf5ca77SDevin Teske proc:::exit, \ 225bf5ca77SDevin Teske proc:::signal-clear, \ 235bf5ca77SDevin Teske proc:::signal-discard, \ 245bf5ca77SDevin Teske proc:::signal-send )} 255bf5ca77SDevin Teske ;; 265bf5ca77SDevin Teskeproc-signal) 275bf5ca77SDevin Teske : ${PROBE:=$( echo \ 285bf5ca77SDevin Teske proc:::signal-clear, \ 295bf5ca77SDevin Teske proc:::signal-discard, \ 305bf5ca77SDevin Teske proc:::signal-send )} 315bf5ca77SDevin Teske ;; 325bf5ca77SDevin Teskeproc-status) 335bf5ca77SDevin Teske : ${PROBE:=$( echo \ 345bf5ca77SDevin Teske proc:::create, \ 355bf5ca77SDevin Teske proc:::exec, \ 365bf5ca77SDevin Teske proc:::exec-failure, \ 375bf5ca77SDevin Teske proc:::exec-success, \ 385bf5ca77SDevin Teske proc:::exit )} 395bf5ca77SDevin Teske ;; 405bf5ca77SDevin Teske*) 415bf5ca77SDevin Teske : ${PROBE:=proc:::${PROFILE#proc-}} 425bf5ca77SDevin Teskeesac 435bf5ca77SDevin Teske 445bf5ca77SDevin Teske############################################################ ACTIONS 455bf5ca77SDevin Teske 465bf5ca77SDevin Teskeexec 9<<EOF 475bf5ca77SDevin Teskethis int sig; 485bf5ca77SDevin Teskethis pid_t pid; 495bf5ca77SDevin Teskethis string details; 505bf5ca77SDevin Teskethis string exec_arg0; 515bf5ca77SDevin Teske 525bf5ca77SDevin Teskeinline string probealias[string name] = 535bf5ca77SDevin Teske name == "create" ? "FORK" : 545bf5ca77SDevin Teske name == "exec" ? "EXEC" : 555bf5ca77SDevin Teske name == "exec-failure" ? "FAIL" : 565bf5ca77SDevin Teske name == "exec-success" ? "INIT" : 575bf5ca77SDevin Teske name == "exit" ? "EXIT" : 585bf5ca77SDevin Teske name == "signal-clear" ? "CLEAR" : 595bf5ca77SDevin Teske name == "signal-discard" ? "DISCARD" : 605bf5ca77SDevin Teske name == "signal-send" ? "SEND" : 615bf5ca77SDevin Teske name; 625bf5ca77SDevin Teske 635bf5ca77SDevin Teske$PROBE /* probe ID $ID */ 645bf5ca77SDevin Teske{${TRACE:+ 655bf5ca77SDevin Teske printf("<$ID>");} 665bf5ca77SDevin Teske this->details = ""; 675bf5ca77SDevin Teske} 685bf5ca77SDevin Teske 695bf5ca77SDevin Teskeproc:::create /* probe ID $(( $ID + 1 )) */ 705bf5ca77SDevin Teske{${TRACE:+ 715bf5ca77SDevin Teske printf("<$(( $ID + 1 ))>"); 725bf5ca77SDevin Teske} 735bf5ca77SDevin Teske $( pproc -P _create "(struct proc *)args[0]" ) 745bf5ca77SDevin Teske 755bf5ca77SDevin Teske /* details = "pid <pid of args[0]> -- <proc args of args[0]>" */ 765bf5ca77SDevin Teske this->details = strjoin( 775bf5ca77SDevin Teske strjoin("pid ", lltostr(this->pid_create)), 785bf5ca77SDevin Teske strjoin(" -- ", this->args_create)); 795bf5ca77SDevin Teske} 805bf5ca77SDevin Teske 815bf5ca77SDevin Teskeproc:::exec /* probe ID $(( $ID + 2 )) */ 825bf5ca77SDevin Teske{${TRACE:+ 835bf5ca77SDevin Teske printf("<$(( $ID + 2 ))");} 845bf5ca77SDevin Teske this->details = this->exec_arg0 = stringof(arg0); 855bf5ca77SDevin Teske} 865bf5ca77SDevin Teske 875bf5ca77SDevin Teskeproc:::exec-failure /* probe ID $(( $ID + 3 )) */ 885bf5ca77SDevin Teske{${TRACE:+ 895bf5ca77SDevin Teske printf("<$(( $ID + 3 ))>"); 905bf5ca77SDevin Teske} 915bf5ca77SDevin Teske /* details = "<arg0 from proc:::exec>: <strerror of arg0> (<arg0>)" */ 925bf5ca77SDevin Teske this->details = strjoin( 935bf5ca77SDevin Teske strjoin(this->exec_arg0, ": "), 945bf5ca77SDevin Teske strjoin(strerror[(int)arg0], 955bf5ca77SDevin Teske strjoin(" (", strjoin(lltostr((int)arg0), ")")))); 965bf5ca77SDevin Teske} 975bf5ca77SDevin Teske 985bf5ca77SDevin Teskeproc:::exec-success /* probe ID $(( $ID + 4 )) */ 995bf5ca77SDevin Teske{${TRACE:+ 1005bf5ca77SDevin Teske printf("<$(( $ID + 4 ))>");} 1015bf5ca77SDevin Teske this->details = this->args0; 1025bf5ca77SDevin Teske} 1035bf5ca77SDevin Teske 1045bf5ca77SDevin Teskeproc:::exit /* probe ID $(( $ID + 5 )) */ 1055bf5ca77SDevin Teske{${TRACE:+ 1065bf5ca77SDevin Teske printf("<$(( $ID + 5 ))>");} 1075bf5ca77SDevin Teske this->details = child_signal_string[(int)arg0]; 1085bf5ca77SDevin Teske} 1095bf5ca77SDevin Teske 1105bf5ca77SDevin Teskeproc:::signal-clear /* probe ID $(( $ID + 6 )) */ 1115bf5ca77SDevin Teske{${TRACE:+ 1125bf5ca77SDevin Teske printf("<$(( $ID + 6 ))>");} 1135bf5ca77SDevin Teske this->pid = (pid_t)((ksiginfo_t *)args[1])->ksi_info.si_pid; 1145bf5ca77SDevin Teske this->sig = (int)arg0; 1155bf5ca77SDevin Teske} 1165bf5ca77SDevin Teske 1175bf5ca77SDevin Teskeproc:::signal-discard, proc:::signal-send /* probe ID $(( $ID + 7 )) */ 1185bf5ca77SDevin Teske{${TRACE:+ 1195bf5ca77SDevin Teske printf("<$(( $ID + 7 ))>");} 1205bf5ca77SDevin Teske this->pid = (pid_t)((struct proc *)args[1])->p_pid; 1215bf5ca77SDevin Teske this->sig = (int)arg2; 1225bf5ca77SDevin Teske} 1235bf5ca77SDevin Teske 1245bf5ca77SDevin Teskeproc:::signal-clear, 1255bf5ca77SDevin Teskeproc:::signal-discard, 1265bf5ca77SDevin Teskeproc:::signal-send /* probe ID $(( $ID + 8 )) */ 1275bf5ca77SDevin Teske{${TRACE:+ 1285bf5ca77SDevin Teske printf("<$(( $ID + 8 ))>"); 1295bf5ca77SDevin Teske} 1305bf5ca77SDevin Teske /* details = "<signal>[<num>] pid <pid>" */ 1315bf5ca77SDevin Teske this->details = strjoin(strjoin(signal_string[this->sig], "["), 1325bf5ca77SDevin Teske strjoin(strjoin(lltostr(this->sig), "] pid "), 1335bf5ca77SDevin Teske lltostr(this->pid))); 1345bf5ca77SDevin Teske} 1355bf5ca77SDevin Teske 1365bf5ca77SDevin Teskeproc:::signal-send, proc:::signal-discard /* probe ID $(( $ID + 9 )) */ 1375bf5ca77SDevin Teske{${TRACE:+ 1385bf5ca77SDevin Teske printf("<$(( $ID + 9 ))>"); 1395bf5ca77SDevin Teske} 1405bf5ca77SDevin Teske $( pproc -P _signal "(struct proc *)args[1]" ) 1415bf5ca77SDevin Teske 1425bf5ca77SDevin Teske this->details = strjoin(this->details, 1435bf5ca77SDevin Teske strjoin(" -- ", this->args_signal)); 1445bf5ca77SDevin Teske} 1455bf5ca77SDevin TeskeEOF 1465bf5ca77SDevin TeskeACTIONS=$( cat <&9 ) 1475bf5ca77SDevin TeskeID=$(( $ID + 10 )) 1485bf5ca77SDevin Teske 1495bf5ca77SDevin Teske############################################################ EVENT DETAILS 1505bf5ca77SDevin Teske 151*a061d970SDevin Teskeif [ ! "$CUSTOM_DETAILS" ]; then 1525bf5ca77SDevin Teskeexec 9<<EOF 1535bf5ca77SDevin Teske /* 1545bf5ca77SDevin Teske * Print details 1555bf5ca77SDevin Teske */ 1565bf5ca77SDevin Teske printf("%s %s", probealias[probename], this->details); 1575bf5ca77SDevin TeskeEOF 1585bf5ca77SDevin TeskeEVENT_DETAILS=$( cat <&9 ) 159*a061d970SDevin Teskefi 1605bf5ca77SDevin Teske 1615bf5ca77SDevin Teske################################################################################ 1625bf5ca77SDevin Teske# END 1635bf5ca77SDevin Teske################################################################################ 164