ref: d82d996819447cd5896553a8405e51d43f9d0599
dir: /rc/bin/pstree/
#!/bin/rc if(~ $#* 0) *=0 cd /proc && ls | sort -n | awk -v 'this='^$1 ' function cat(f, v){ getline v < f close(f) return v } BEGIN{ OFS="\t" } /^[0-9]+/ { s = cat($1"/args") if(s == ""){ s = cat($1"/status") s = substr(s, 1, 27) gsub(" *", "", s) } p = int(cat($1"/ppid")) child[p,++nchild[p]] = $1 proc[$1] = s ppid[$1] = p pid[NR] = $1 } function out(p, sep, k, m, i, n, c, s){ n = nchild[p] if(p != 0 && proc[p] != "") printf "%-11s%s%s%s\n", p, sep, k, proc[p] s = m > 0 ? "│" : " " k = "├" for(i=1; i<=n; i++){ c = child[p,i] if(i == n) k = "└" out(c, sep s, k, n - i) } } END{ for(i=1; i<=length(pid); i++){ p = pid[i] if(p && !(ppid[p] in proc) && ppid[p] != 0) child[0,++nchild[0]] = p } out(this, "", "", 0) } '