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