summaryrefslogtreecommitdiff
path: root/rc/bin/tap
blob: 691e15275a261369849798e0d9123915b78e87f7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#!/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 $*