summaryrefslogtreecommitdiffstats
path: root/usr.bin/top
diff options
context:
space:
mode:
Diffstat (limited to 'usr.bin/top')
-rw-r--r--usr.bin/top/machine.c112
1 files changed, 64 insertions, 48 deletions
diff --git a/usr.bin/top/machine.c b/usr.bin/top/machine.c
index dadb03d..cc12705 100644
--- a/usr.bin/top/machine.c
+++ b/usr.bin/top/machine.c
@@ -737,56 +737,72 @@ format_next_process(caddr_t handle, char *(*get_userid)(int), int flags)
}
if (!(flags & FMT_SHOWARGS)) {
- snprintf(cmdbuf, cmdlengthdelta, "%s", pp->ki_comm);
- }
- else if (pp->ki_args == NULL ||
- (args = kvm_getargv(kd, pp, cmdlengthdelta)) == NULL || !(*args))
- snprintf(cmdbuf, cmdlengthdelta, "[%s]", pp->ki_comm);
- else {
- char *src, *dst, *argbuf;
- char *cmd;
- size_t argbuflen;
- size_t len;
-
- argbuflen = cmdlengthdelta * 4;
- argbuf = (char *)malloc(argbuflen + 1);
- if (argbuf == NULL) {
- warn("malloc(%d)", argbuflen + 1);
- free(cmdbuf);
- return NULL;
+ if (ps.thread && pp->ki_flag & P_HADTHREADS &&
+ pp->ki_ocomm[0]) {
+ snprintf(cmdbuf, cmdlengthdelta, "{%s}", pp->ki_ocomm);
+ } else {
+ snprintf(cmdbuf, cmdlengthdelta, "%s", pp->ki_comm);
}
-
- dst = argbuf;
-
- /* Extract cmd name from argv */
- cmd = strrchr(*args, '/');
- if (cmd == NULL)
- cmd = *args;
- else
- cmd++;
-
- for (; (src = *args++) != NULL; ) {
- if (*src == '\0')
- continue;
- len = (argbuflen - (dst - argbuf) - 1) / 4;
- strvisx(dst, src, strlen(src) < len ? strlen(src) : len,
- VIS_NL | VIS_CSTYLE);
- while (*dst != '\0')
- dst++;
- if ((argbuflen - (dst - argbuf) - 1) / 4 > 0)
- *dst++ = ' '; /* add delimiting space */
+ } else {
+ if (pp->ki_flag & P_SYSTEM ||
+ pp->ki_args == NULL ||
+ (args = kvm_getargv(kd, pp, cmdlengthdelta)) == NULL ||
+ !(*args)) {
+ if (ps.thread && pp->ki_flag & P_HADTHREADS &&
+ pp->ki_ocomm[0]) {
+ snprintf(cmdbuf, cmdlengthdelta,
+ "{%s}", pp->ki_ocomm);
+ } else {
+ snprintf(cmdbuf, cmdlengthdelta,
+ "[%s]", pp->ki_comm);
+ }
+ } else {
+ char *src, *dst, *argbuf;
+ char *cmd;
+ size_t argbuflen;
+ size_t len;
+
+ argbuflen = cmdlengthdelta * 4;
+ argbuf = (char *)malloc(argbuflen + 1);
+ if (argbuf == NULL) {
+ warn("malloc(%d)", argbuflen + 1);
+ free(cmdbuf);
+ return NULL;
+ }
+
+ dst = argbuf;
+
+ /* Extract cmd name from argv */
+ cmd = strrchr(*args, '/');
+ if (cmd == NULL)
+ cmd = *args;
+ else
+ cmd++;
+
+ for (; (src = *args++) != NULL; ) {
+ if (*src == '\0')
+ continue;
+ len = (argbuflen - (dst - argbuf) - 1) / 4;
+ strvisx(dst, src,
+ strlen(src) < len ? strlen(src) : len,
+ VIS_NL | VIS_CSTYLE);
+ while (*dst != '\0')
+ dst++;
+ if ((argbuflen - (dst - argbuf) - 1) / 4 > 0)
+ *dst++ = ' '; /* add delimiting space */
+ }
+ if (dst != argbuf && dst[-1] == ' ')
+ dst--;
+ *dst = '\0';
+
+ if (strcmp(cmd, pp->ki_comm) != 0 )
+ snprintf(cmdbuf, cmdlengthdelta,
+ "%s (%s)",argbuf, pp->ki_comm);
+ else
+ strlcpy(cmdbuf, argbuf, cmdlengthdelta);
+
+ free(argbuf);
}
- if (dst != argbuf && dst[-1] == ' ')
- dst--;
- *dst = '\0';
-
- if (strcmp(cmd, pp->ki_comm) != 0 )
- snprintf(cmdbuf, cmdlengthdelta, "%s (%s)",argbuf, \
- pp->ki_comm);
- else
- strlcpy(cmdbuf, argbuf, cmdlengthdelta);
-
- free(argbuf);
}
if (ps.jail == 0)
OpenPOWER on IntegriCloud