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