summaryrefslogtreecommitdiff
path: root/rc
diff options
context:
space:
mode:
authorcinap_lenrek <cinap_lenrek@gmx.de>2012-11-12 02:12:05 +0100
committercinap_lenrek <cinap_lenrek@gmx.de>2012-11-12 02:12:05 +0100
commit1f02aabc6b86e4cb8735cf07ad9e0036d38b6543 (patch)
tree6bac9ee633a97d1c04f8450645ea2f6287bfb30f /rc
parent00daf47137edba4580d0db15d2a18a7112dbe133 (diff)
downloadplan9front-1f02aabc6b86e4cb8735cf07ad9e0036d38b6543.tar.xz
tap: various improvements
dont use sed pipeline for indention, cache process arguments, get process list once at start.
Diffstat (limited to 'rc')
-rwxr-xr-xrc/bin/tap43
1 files changed, 26 insertions, 17 deletions
diff --git a/rc/bin/tap b/rc/bin/tap
index 691e15275..0cc0d40af 100755
--- a/rc/bin/tap
+++ b/rc/bin/tap
@@ -1,7 +1,12 @@
#!/bin/rc
rfork e
-v=()
+if(~ $#* 0){
+ echo 'Usage: ' $0 '[ pid ... ]' >[1=2]
+ exit usage
+}
+
+f=/proc/*/fd
fn otherqid {
x=`{echo $1 | sed 's/[12]$//'}
@@ -15,9 +20,10 @@ fn otherqid {
fn traceqid {
while(! ~ $#* 0){
- echo '['$2']' $3 $1
- tracepid `{grep -n `{otherqid $1} /proc/*/fd | sed 's!^/proc/([^/]+)/.*!\1!g'} \
- | sed 's/^/ /g'
+ echo $t '['$2']' $3 $1
+ t=(' ' $t)
+ tracepid `{grep -n `{otherqid $1} $f >[2]/dev/null | sed 's!^/proc/([^/]+)/.*!\1!g'}
+ t=$t(2-)
shift
shift
shift
@@ -26,22 +32,25 @@ fn traceqid {
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'
+ a=ap$1
+ v=av$1
+ if(~ $$v $1){
+ echo $t $1 $$a ' ...'
+ }
+ if not {
+ $v=$1
+ $a=`{cat /proc/$1/args >[2]/dev/null}
+ if(~ $$a ''){
+ s=`{cat /proc/$1/status >[2]/dev/null}
+ $a=$s(1)
+ }
+ echo $t $1 $$a
+ t=(' ' $t)
+ traceqid `{awk '/\|/{q=substr($5,2);print q" "$1" "$10}' /proc/$1/fd >[2]/dev/null}
+ t=$t(2-)
}
shift
}
}
-if(~ $#* 0){
- echo 'Usage: ' $0 '[ pid ... ]' >[1=2]
- exit usage
-}
-
tracepid $*