#!/bin/rc
@{ for ( file in /proc/[0-9]*/status){
cat $file >[2] /dev/null && echo ''
}} |
awk '
BEGIN{
ofs = FS;
FS="|";
while (getline < "/adm/keys.who")
really[$1] = $3;
while (getline < "/adm/netkeys.who")
really[$1] = $3;
FS=ofs;
"date -n" | getline now;
}
{
nproc[$2]++;
utime[$2] += $4;
stime[$2] += $5;
if ($6 == "" || $6 > rtime[$2])
rtime[$2] = $6;
if($2 != prev)
memsz[$2] += $10;
prev = $2;
}
END {
for (u in nproc)
printf("%-12s %3d %10s %10s %6.1fMb %8s %s\n",
u,
nproc[u],
s2ms(utime[u]/1000),
s2ms(stime[u]/1000),
memsz[u]/1024.0,
when(rtime[u]/1000),
really[u]);
}
function s2ms(n){
return sprintf("%d:%02d", n/60, n%60);
}
function when(s, d, h, m){
d = int(s/86400); s -= d*86400;
h = int(s/3600); s -= h*3600;
m = int(s/60); s -= m*60;
if (d != 0)
return sprintf("%dd", d);
else
return sprintf("%dh", h);
}
'
|