bin/139389: [patch] Change top(1) to display thread IDs
Andrew Brampton
brampton at gmail.com
Wed Oct 7 10:00:15 UTC 2009
>Number: 139389
>Category: bin
>Synopsis: [patch] Change top(1) to display thread IDs
>Confidential: no
>Severity: non-critical
>Priority: low
>Responsible: freebsd-bugs
>State: open
>Quarter:
>Keywords:
>Date-Required:
>Class: change-request
>Submitter-Id: current-users
>Arrival-Date: Wed Oct 07 10:00:15 UTC 2009
>Closed-Date:
>Last-Modified:
>Originator: Andrew Brampton
>Release: FreeBSD 8.0-RC1
>Organization:
>Environment:
FreeBSD machine 8.0-RC1 FreeBSD 8.0-RC1 #25 r197611M: Tue Sep 29 12:21:18 BST 2009 root at machine:/usr/obj/usr/src/sys/CUSTOM amd64
>Description:
The program top(1) does not display thread IDs when listing threads (in "-H" mode). Displaying the thread ID can be very useful when using the tool cpuset, as this takes a thread ID as an argument.
The attached patch adds a new column after PID which displays the Thread ID.
>How-To-Repeat:
>Fix:
Patch attached with submission follows:
Index: usr.bin/top/machine.c
===================================================================
--- usr.bin/top/machine.c (revision 197611)
+++ usr.bin/top/machine.c (working copy)
@@ -108,18 +108,18 @@
static char smp_header_thr[] =
" PID%s %-*.*s THR PRI NICE SIZE RES STATE C TIME %6s COMMAND";
static char smp_header[] =
- " PID%s %-*.*s " "PRI NICE SIZE RES STATE C TIME %6s COMMAND";
+ " PID TID%s %-*.*s PRI NICE SIZE RES STATE C TIME %6s COMMAND";
#define smp_Proc_format \
- "%5d%s %-*.*s %s%3d %4s%7s %6s %-6.6s %2d%7s %5.2f%% %.*s"
+ "%5d%s%s %-*.*s %s%3d %4s%7s %6s %-6.6s %2d%7s %5.2f%% %.*s"
static char up_header_thr[] =
" PID%s %-*.*s THR PRI NICE SIZE RES STATE TIME %6s COMMAND";
static char up_header[] =
- " PID%s %-*.*s " "PRI NICE SIZE RES STATE TIME %6s COMMAND";
+ " PID TID%s %-*.*s PRI NICE SIZE RES STATE TIME %6s COMMAND";
#define up_Proc_format \
- "%5d%s %-*.*s %s%3d %4s%7s %6s %-6.6s%.0d%7s %5.2f%% %.*s"
+ "%5d%s%s %-*.*s %s%3d %4s%7s %6s %-6.6s%.0d%7s %5.2f%% %.*s"
/* process state names for the "STATE" column of the display */
@@ -757,7 +757,7 @@
int state;
struct rusage ru, *rup;
long p_tot, s_tot;
- char *proc_fmt, thr_buf[6], jid_buf[6];
+ char *proc_fmt, tid_buf[8], thr_buf[6], jid_buf[6];
char *cmdbuf = NULL;
char **args;
@@ -942,14 +942,19 @@
/* format this entry */
proc_fmt = smpmode ? smp_Proc_format : up_Proc_format;
- if (ps.thread != 0)
+ if (ps.thread) {
thr_buf[0] = '\0';
- else
+ snprintf(tid_buf, sizeof(tid_buf), "%*d",
+ sizeof(tid_buf) - 1, pp->ki_tid);
+ } else {
+ tid_buf[0] = '\0';
snprintf(thr_buf, sizeof(thr_buf), "%*d ",
sizeof(thr_buf) - 2, pp->ki_numthreads);
+ }
sprintf(fmt, proc_fmt,
pp->ki_pid,
+ tid_buf,
jid_buf,
namelength, namelength, (*get_userid)(pp->ki_ruid),
thr_buf,
>Release-Note:
>Audit-Trail:
>Unformatted:
More information about the freebsd-bugs
mailing list