Enhance the 'ps' command so that it prints a line per proc and a line

per thread, so that instead of repeating the same info for all threads
in proc, it would print thread specific info. Also includes thread number
that would match 'info threads' info and can be used as argument for
thread swithcing with 'thread' command.
This commit is contained in:
glebius 2019-09-25 18:03:15 +00:00
parent dd20cd52c2
commit 3988008507

View File

@ -199,28 +199,29 @@ define ps
set $nproc = nprocs
set $aproc = allproc.lh_first
set $proc = allproc.lh_first
printf " pid proc uid ppid pgrp flag stat comm wchan\n"
set $tid = 1
printf "pid/ID ppid/tid uid pgrp flag st comm/name proc/thread\n"
while (--$nproc >= 0)
set $pptr = $proc.p_pptr
if ($pptr == 0)
set $pptr = $proc
end
if ($proc.p_state)
printf " %5d %6d %4d %5d %8x %2d %-10s %p\n", \
$proc.p_pid, $pptr->p_pid, \
$proc.p_ucred->cr_ruid, \
$proc.p_pgrp->pg_id, $proc.p_flag, $proc.p_state, \
&$proc.p_comm[0], $aproc
set $thread = $proc->p_threads.tqh_first
while ($thread)
printf "%5d %08x %4d %5d %5d %06x %d %-10s ", \
$proc.p_pid, $aproc, \
$proc.p_ucred->cr_ruid, $pptr->p_pid, \
$proc.p_pgrp->pg_id, $proc.p_flag, $proc.p_state, \
&$proc.p_comm[0]
if ($thread.td_wchan)
printf "(%5d) %6d %-10s %p", \
$tid, $thread->td_tid, $thread->td_name, $thread
if ($thread.td_wmesg)
printf "%s ", $thread.td_wmesg
end
printf "%x", $thread.td_wchan
printf " %s", $thread.td_wmesg
end
printf "\n"
set $thread = $thread->td_plist.tqe_next
set $tid = $tid + 1
end
end
set $aproc = $proc.p_list.le_next