xref: /freebsd/cddl/usr.sbin/dwatch/libexec/proc (revision d0b2dbfa0ecf2bbc9709efc5e20baf8e4b44bbbf)
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