shithub: riscv

ref: 68537b7e9663c45f106b45d368dc0911a1dd87f3
dir: /rc/bin/tap/

View raw version
#!/bin/rc
rfork e

v=()

fn otherqid {
	x=`{echo $1 | sed 's/[12]$//'}
	switch($1){
	case $x^1
		echo $x^2
	case $x^2
		echo $x^1
	}
}

fn traceqid {
	while(! ~ $#* 0){
		echo '['$2']' $3 $1
		tracepid `{grep -n `{otherqid $1} /proc/*/fd | sed 's!^/proc/([^/]+)/.*!\1!g'} \
			| sed 's/^/	/g'
		shift
		shift
		shift
	}
}

fn tracepid {
	while(! ~ $#* 0){
		echo $1 `{cat /proc/$1/args >[2]/dev/null}
		switch($1){
		case $v
			echo '	...'
		case *
			v=($1 $v)
			traceqid `{awk '/\|/{q=substr($5,2);print q" "$1" "$10}' /proc/$1/fd} \
				| sed 's/^/	/g'
		}
		shift
	}
}

if(~ $#* 0){
	echo 'Usage: ' $0 '[ pid ... ]' >[1=2]
	exit usage
}

tracepid $*