summaryrefslogtreecommitdiffstats
path: root/bin/ps/ps.c
diff options
context:
space:
mode:
authorjhb <jhb@FreeBSD.org>2013-01-18 18:24:40 +0000
committerjhb <jhb@FreeBSD.org>2013-01-18 18:24:40 +0000
commita757b0e056a396f4f674631a6e5eea6d29ed1087 (patch)
treeaed2f3561e63278779cb00bbb800054d69c48e07 /bin/ps/ps.c
parentb42e95f726ab4d12ba08b44e67e915c118e6597b (diff)
downloadFreeBSD-src-a757b0e056a396f4f674631a6e5eea6d29ed1087.zip
FreeBSD-src-a757b0e056a396f4f674631a6e5eea6d29ed1087.tar.gz
Include the thread name along with the command name when displaying the
command name of a thread from a multi-threaded process that doesn't have an available argument list (such as kernel processes) and threads display is enabled via -H. Reviewed by: alfred, delphij, eric@vangyzen.net MFC after: 1 week
Diffstat (limited to 'bin/ps/ps.c')
-rw-r--r--bin/ps/ps.c11
1 files changed, 6 insertions, 5 deletions
diff --git a/bin/ps/ps.c b/bin/ps/ps.c
index e9fc5fa..8a05ebc 100644
--- a/bin/ps/ps.c
+++ b/bin/ps/ps.c
@@ -141,7 +141,7 @@ static void format_output(KINFO *);
static void *expand_list(struct listinfo *);
static const char *
fmt(char **(*)(kvm_t *, const struct kinfo_proc *, int),
- KINFO *, char *, int);
+ KINFO *, char *, char *, int);
static void free_list(struct listinfo *);
static void init_list(struct listinfo *, addelem_rtn, int, const char *);
static char *kludge_oldps_options(const char *, char *, const char *);
@@ -1163,11 +1163,12 @@ sizevars(void)
static const char *
fmt(char **(*fn)(kvm_t *, const struct kinfo_proc *, int), KINFO *ki,
- char *comm, int maxlen)
+ char *comm, char *thread, int maxlen)
{
const char *s;
- s = fmt_argv((*fn)(kd, ki->ki_p, termwidth), comm, maxlen);
+ s = fmt_argv((*fn)(kd, ki->ki_p, termwidth), comm,
+ ki->ki_p->ki_numthreads > 1 ? thread : NULL, maxlen);
return (s);
}
@@ -1195,7 +1196,7 @@ saveuser(KINFO *ki)
ki->ki_args = strdup("<defunct>");
else if (UREADOK(ki) || (ki->ki_p->ki_args != NULL))
ki->ki_args = strdup(fmt(kvm_getargv, ki,
- ki->ki_p->ki_comm, MAXCOMLEN));
+ ki->ki_p->ki_comm, ki->ki_p->ki_tdname, MAXCOMLEN));
else
asprintf(&ki->ki_args, "(%s)", ki->ki_p->ki_comm);
if (ki->ki_args == NULL)
@@ -1206,7 +1207,7 @@ saveuser(KINFO *ki)
if (needenv) {
if (UREADOK(ki))
ki->ki_env = strdup(fmt(kvm_getenvv, ki,
- (char *)NULL, 0));
+ (char *)NULL, (char *)NULL, 0));
else
ki->ki_env = strdup("()");
if (ki->ki_env == NULL)
OpenPOWER on IntegriCloud