summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorcinap_lenrek <cinap_lenrek@flatbox.9hal>2012-03-09 23:10:17 +0100
committercinap_lenrek <cinap_lenrek@flatbox.9hal>2012-03-09 23:10:17 +0100
commit1d712d7e223e0c96c4b138bf52acb85a97c8ce7a (patch)
tree84557f0c3de09aabedb3d975d19672c23ec491e8
parent388cd56d6917c9e3fdbf29801cdd9d379d1c938f (diff)
downloadplan9front-1d712d7e223e0c96c4b138bf52acb85a97c8ce7a.tar.xz
tap: trace all pipes
-rwxr-xr-xrc/bin/tap45
1 files changed, 45 insertions, 0 deletions
diff --git a/rc/bin/tap b/rc/bin/tap
new file mode 100755
index 000000000..d17d175d4
--- /dev/null
+++ b/rc/bin/tap
@@ -0,0 +1,45 @@
+#!/bin/rc
+
+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']' $1
+ tracepid `{grep -n `{otherqid $1} /proc/*/fd | sed 's!^/proc/([^/]+)/.*!\1!g'} \
+ | sed 's/^/ /g'
+ 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 '/\#\|\/data1?$/{q=substr($5,2);print q" "$1}' /proc/$1/fd} \
+ | sed 's/^/ /g'
+ }
+ shift
+ }
+}
+
+if(~ $#* 0){
+ echo 'Usage: ' $0 '[ pid ... ]' >[1=2]
+ exit usage
+}
+
+tracepid $*