Export the whole thread name in kinfo_proc
kinfo_proc::ki_tdname is three characters shorter than thread::td_name. Add a ki_moretdname field for these three extra characters. Add the new field to kinfo_proc32, as well. Update all in-tree consumers to read the new field and assemble the full name, except for lldb's HostThreadFreeBSD.cpp, which I will handle separately. Bump __FreeBSD_version. Reviewed by: kib MFC after: 1 week Relnotes: yes Sponsored by: Dell EMC Differential Revision: https://reviews.freebsd.org/D8722
This commit is contained in:
parent
75747c209c
commit
3d32d4a7c9
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=309676
@ -120,11 +120,12 @@ command(KINFO *k, VARENT *ve)
|
|||||||
if (cflag) {
|
if (cflag) {
|
||||||
/* If it is the last field, then don't pad */
|
/* If it is the last field, then don't pad */
|
||||||
if (STAILQ_NEXT(ve, next_ve) == NULL) {
|
if (STAILQ_NEXT(ve, next_ve) == NULL) {
|
||||||
asprintf(&str, "%s%s%s%s",
|
asprintf(&str, "%s%s%s%s%s",
|
||||||
k->ki_d.prefix ? k->ki_d.prefix : "",
|
k->ki_d.prefix ? k->ki_d.prefix : "",
|
||||||
k->ki_p->ki_comm,
|
k->ki_p->ki_comm,
|
||||||
(showthreads && k->ki_p->ki_numthreads > 1) ? "/" : "",
|
(showthreads && k->ki_p->ki_numthreads > 1) ? "/" : "",
|
||||||
(showthreads && k->ki_p->ki_numthreads > 1) ? k->ki_p->ki_tdname : "");
|
(showthreads && k->ki_p->ki_numthreads > 1) ? k->ki_p->ki_tdname : "",
|
||||||
|
(showthreads && k->ki_p->ki_numthreads > 1) ? k->ki_p->ki_moretdname : "");
|
||||||
} else
|
} else
|
||||||
str = strdup(k->ki_p->ki_comm);
|
str = strdup(k->ki_p->ki_comm);
|
||||||
|
|
||||||
@ -172,14 +173,16 @@ ucomm(KINFO *k, VARENT *ve)
|
|||||||
char *str;
|
char *str;
|
||||||
|
|
||||||
if (STAILQ_NEXT(ve, next_ve) == NULL) { /* last field, don't pad */
|
if (STAILQ_NEXT(ve, next_ve) == NULL) { /* last field, don't pad */
|
||||||
asprintf(&str, "%s%s%s%s",
|
asprintf(&str, "%s%s%s%s%s",
|
||||||
k->ki_d.prefix ? k->ki_d.prefix : "",
|
k->ki_d.prefix ? k->ki_d.prefix : "",
|
||||||
k->ki_p->ki_comm,
|
k->ki_p->ki_comm,
|
||||||
(showthreads && k->ki_p->ki_numthreads > 1) ? "/" : "",
|
(showthreads && k->ki_p->ki_numthreads > 1) ? "/" : "",
|
||||||
(showthreads && k->ki_p->ki_numthreads > 1) ? k->ki_p->ki_tdname : "");
|
(showthreads && k->ki_p->ki_numthreads > 1) ? k->ki_p->ki_tdname : "",
|
||||||
|
(showthreads && k->ki_p->ki_numthreads > 1) ? k->ki_p->ki_moretdname : "");
|
||||||
} else {
|
} else {
|
||||||
if (showthreads && k->ki_p->ki_numthreads > 1)
|
if (showthreads && k->ki_p->ki_numthreads > 1)
|
||||||
asprintf(&str, "%s/%s", k->ki_p->ki_comm, k->ki_p->ki_tdname);
|
asprintf(&str, "%s/%s%s", k->ki_p->ki_comm,
|
||||||
|
k->ki_p->ki_tdname, k->ki_p->ki_moretdname);
|
||||||
else
|
else
|
||||||
str = strdup(k->ki_p->ki_comm);
|
str = strdup(k->ki_p->ki_comm);
|
||||||
}
|
}
|
||||||
@ -192,7 +195,8 @@ tdnam(KINFO *k, VARENT *ve __unused)
|
|||||||
char *str;
|
char *str;
|
||||||
|
|
||||||
if (showthreads && k->ki_p->ki_numthreads > 1)
|
if (showthreads && k->ki_p->ki_numthreads > 1)
|
||||||
str = strdup(k->ki_p->ki_tdname);
|
asprintf(&str, "%s%s", k->ki_p->ki_tdname,
|
||||||
|
k->ki_p->ki_moretdname);
|
||||||
else
|
else
|
||||||
str = strdup(" ");
|
str = strdup(" ");
|
||||||
|
|
||||||
|
@ -426,8 +426,6 @@ kvm_proclist(kvm_t *kd, int what, int arg, struct proc *p,
|
|||||||
kp->ki_pri.pri_native = mtd.td_base_pri;
|
kp->ki_pri.pri_native = mtd.td_base_pri;
|
||||||
kp->ki_lastcpu = mtd.td_lastcpu;
|
kp->ki_lastcpu = mtd.td_lastcpu;
|
||||||
kp->ki_wchan = mtd.td_wchan;
|
kp->ki_wchan = mtd.td_wchan;
|
||||||
if (mtd.td_name[0] != 0)
|
|
||||||
strlcpy(kp->ki_tdname, mtd.td_name, MAXCOMLEN);
|
|
||||||
kp->ki_oncpu = mtd.td_oncpu;
|
kp->ki_oncpu = mtd.td_oncpu;
|
||||||
if (mtd.td_name[0] != '\0')
|
if (mtd.td_name[0] != '\0')
|
||||||
strlcpy(kp->ki_tdname, mtd.td_name, sizeof(kp->ki_tdname));
|
strlcpy(kp->ki_tdname, mtd.td_name, sizeof(kp->ki_tdname));
|
||||||
|
@ -315,7 +315,8 @@ struct kinfo_proc32 {
|
|||||||
char ki_comm[COMMLEN+1];
|
char ki_comm[COMMLEN+1];
|
||||||
char ki_emul[KI_EMULNAMELEN+1];
|
char ki_emul[KI_EMULNAMELEN+1];
|
||||||
char ki_loginclass[LOGINCLASSLEN+1];
|
char ki_loginclass[LOGINCLASSLEN+1];
|
||||||
char ki_sparestrings[50];
|
char ki_moretdname[MAXCOMLEN-TDNAMLEN+1];
|
||||||
|
char ki_sparestrings[46];
|
||||||
int ki_spareints[KI_NSPARE_INT];
|
int ki_spareints[KI_NSPARE_INT];
|
||||||
int ki_oncpu;
|
int ki_oncpu;
|
||||||
int ki_lastcpu;
|
int ki_lastcpu;
|
||||||
|
@ -1020,7 +1020,14 @@ fill_kinfo_thread(struct thread *td, struct kinfo_proc *kp, int preferthread)
|
|||||||
strlcpy(kp->ki_wmesg, td->td_wmesg, sizeof(kp->ki_wmesg));
|
strlcpy(kp->ki_wmesg, td->td_wmesg, sizeof(kp->ki_wmesg));
|
||||||
else
|
else
|
||||||
bzero(kp->ki_wmesg, sizeof(kp->ki_wmesg));
|
bzero(kp->ki_wmesg, sizeof(kp->ki_wmesg));
|
||||||
strlcpy(kp->ki_tdname, td->td_name, sizeof(kp->ki_tdname));
|
if (strlcpy(kp->ki_tdname, td->td_name, sizeof(kp->ki_tdname)) >=
|
||||||
|
sizeof(kp->ki_tdname)) {
|
||||||
|
strlcpy(kp->ki_moretdname,
|
||||||
|
td->td_name + sizeof(kp->ki_tdname) - 1,
|
||||||
|
sizeof(kp->ki_moretdname));
|
||||||
|
} else {
|
||||||
|
bzero(kp->ki_moretdname, sizeof(kp->ki_moretdname));
|
||||||
|
}
|
||||||
if (TD_ON_LOCK(td)) {
|
if (TD_ON_LOCK(td)) {
|
||||||
kp->ki_kiflag |= KI_LOCKBLOCK;
|
kp->ki_kiflag |= KI_LOCKBLOCK;
|
||||||
strlcpy(kp->ki_lockname, td->td_lockname,
|
strlcpy(kp->ki_lockname, td->td_lockname,
|
||||||
@ -1265,6 +1272,7 @@ freebsd32_kinfo_proc_out(const struct kinfo_proc *ki, struct kinfo_proc32 *ki32)
|
|||||||
bcopy(ki->ki_comm, ki32->ki_comm, COMMLEN + 1);
|
bcopy(ki->ki_comm, ki32->ki_comm, COMMLEN + 1);
|
||||||
bcopy(ki->ki_emul, ki32->ki_emul, KI_EMULNAMELEN + 1);
|
bcopy(ki->ki_emul, ki32->ki_emul, KI_EMULNAMELEN + 1);
|
||||||
bcopy(ki->ki_loginclass, ki32->ki_loginclass, LOGINCLASSLEN + 1);
|
bcopy(ki->ki_loginclass, ki32->ki_loginclass, LOGINCLASSLEN + 1);
|
||||||
|
bcopy(ki->ki_moretdname, ki32->ki_moretdname, MAXCOMLEN - TDNAMLEN + 1);
|
||||||
CP(*ki, *ki32, ki_tracer);
|
CP(*ki, *ki32, ki_tracer);
|
||||||
CP(*ki, *ki32, ki_flag2);
|
CP(*ki, *ki32, ki_flag2);
|
||||||
CP(*ki, *ki32, ki_fibnum);
|
CP(*ki, *ki32, ki_fibnum);
|
||||||
|
@ -58,7 +58,7 @@
|
|||||||
* in the range 5 to 9.
|
* in the range 5 to 9.
|
||||||
*/
|
*/
|
||||||
#undef __FreeBSD_version
|
#undef __FreeBSD_version
|
||||||
#define __FreeBSD_version 1200017 /* Master, propagated to newvers */
|
#define __FreeBSD_version 1200018 /* Master, propagated to newvers */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* __FreeBSD_kernel__ indicates that this system uses the kernel of FreeBSD,
|
* __FreeBSD_kernel__ indicates that this system uses the kernel of FreeBSD,
|
||||||
|
@ -180,12 +180,13 @@ struct kinfo_proc {
|
|||||||
char ki_comm[COMMLEN+1]; /* command name */
|
char ki_comm[COMMLEN+1]; /* command name */
|
||||||
char ki_emul[KI_EMULNAMELEN+1]; /* emulation name */
|
char ki_emul[KI_EMULNAMELEN+1]; /* emulation name */
|
||||||
char ki_loginclass[LOGINCLASSLEN+1]; /* login class */
|
char ki_loginclass[LOGINCLASSLEN+1]; /* login class */
|
||||||
|
char ki_moretdname[MAXCOMLEN-TDNAMLEN+1]; /* more thread name */
|
||||||
/*
|
/*
|
||||||
* When adding new variables, take space for char-strings from the
|
* When adding new variables, take space for char-strings from the
|
||||||
* front of ki_sparestrings, and ints from the end of ki_spareints.
|
* front of ki_sparestrings, and ints from the end of ki_spareints.
|
||||||
* That way the spare room from both arrays will remain contiguous.
|
* That way the spare room from both arrays will remain contiguous.
|
||||||
*/
|
*/
|
||||||
char ki_sparestrings[50]; /* spare string space */
|
char ki_sparestrings[46]; /* spare string space */
|
||||||
int ki_spareints[KI_NSPARE_INT]; /* spare room for growth */
|
int ki_spareints[KI_NSPARE_INT]; /* spare room for growth */
|
||||||
int ki_oncpu; /* Which cpu we are on */
|
int ki_oncpu; /* Which cpu we are on */
|
||||||
int ki_lastcpu; /* Last cpu we were on */
|
int ki_lastcpu; /* Last cpu we were on */
|
||||||
|
@ -35,6 +35,7 @@
|
|||||||
#include <libprocstat.h>
|
#include <libprocstat.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
#include <sysexits.h>
|
#include <sysexits.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
|
||||||
@ -126,6 +127,21 @@ kinfo_proc_sort(struct kinfo_proc *kipp, int count)
|
|||||||
qsort(kipp, count, sizeof(*kipp), kinfo_proc_compare);
|
qsort(kipp, count, sizeof(*kipp), kinfo_proc_compare);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const char *
|
||||||
|
kinfo_proc_thread_name(const struct kinfo_proc *kipp)
|
||||||
|
{
|
||||||
|
static char name[MAXCOMLEN+1];
|
||||||
|
|
||||||
|
strlcpy(name, kipp->ki_tdname, sizeof(name));
|
||||||
|
strlcat(name, kipp->ki_moretdname, sizeof(name));
|
||||||
|
if (name[0] == '\0' || strcmp(kipp->ki_comm, name) == 0) {
|
||||||
|
name[0] = '-';
|
||||||
|
name[1] = '\0';
|
||||||
|
}
|
||||||
|
|
||||||
|
return (name);
|
||||||
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
main(int argc, char *argv[])
|
main(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
|
@ -38,6 +38,7 @@ extern int hflag, nflag, Cflag, Hflag;
|
|||||||
|
|
||||||
struct kinfo_proc;
|
struct kinfo_proc;
|
||||||
void kinfo_proc_sort(struct kinfo_proc *kipp, int count);
|
void kinfo_proc_sort(struct kinfo_proc *kipp, int count);
|
||||||
|
const char * kinfo_proc_thread_name(const struct kinfo_proc *kipp);
|
||||||
|
|
||||||
void procstat_args(struct procstat *prstat, struct kinfo_proc *kipp);
|
void procstat_args(struct procstat *prstat, struct kinfo_proc *kipp);
|
||||||
void procstat_auxv(struct procstat *prstat, struct kinfo_proc *kipp);
|
void procstat_auxv(struct procstat *prstat, struct kinfo_proc *kipp);
|
||||||
|
@ -53,7 +53,7 @@ procstat_cs(struct procstat *procstat, struct kinfo_proc *kipp)
|
|||||||
int once, twice, lastcpu, cpu;
|
int once, twice, lastcpu, cpu;
|
||||||
|
|
||||||
if (!hflag)
|
if (!hflag)
|
||||||
xo_emit("{T:/%5s %6s %-16s %-16s %2s %4s %-7s}\n", "PID",
|
xo_emit("{T:/%5s %6s %-19s %-19s %2s %4s %-7s}\n", "PID",
|
||||||
"TID", "COMM", "TDNAME", "CPU", "CSID", "CPU MASK");
|
"TID", "COMM", "TDNAME", "CPU", "CSID", "CPU MASK");
|
||||||
|
|
||||||
kip = procstat_getprocs(procstat, KERN_PROC_PID | KERN_PROC_INC_THREAD,
|
kip = procstat_getprocs(procstat, KERN_PROC_PID | KERN_PROC_INC_THREAD,
|
||||||
@ -65,11 +65,10 @@ procstat_cs(struct procstat *procstat, struct kinfo_proc *kipp)
|
|||||||
kipp = &kip[i];
|
kipp = &kip[i];
|
||||||
xo_emit("{k:process_id/%5d/%d} ", kipp->ki_pid);
|
xo_emit("{k:process_id/%5d/%d} ", kipp->ki_pid);
|
||||||
xo_emit("{:thread_id/%6d/%d} ", kipp->ki_tid);
|
xo_emit("{:thread_id/%6d/%d} ", kipp->ki_tid);
|
||||||
xo_emit("{:command/%-16s/%s} ", strlen(kipp->ki_comm) ?
|
xo_emit("{:command/%-19s/%s} ", strlen(kipp->ki_comm) ?
|
||||||
kipp->ki_comm : "-");
|
kipp->ki_comm : "-");
|
||||||
xo_emit("{:thread_name/%-16s/%s} ", (strlen(kipp->ki_tdname) &&
|
xo_emit("{:thread_name/%-19s/%s} ",
|
||||||
(strcmp(kipp->ki_comm, kipp->ki_tdname) != 0)) ?
|
kinfo_proc_thread_name(kipp));
|
||||||
kipp->ki_tdname : "-");
|
|
||||||
if (kipp->ki_oncpu != 255)
|
if (kipp->ki_oncpu != 255)
|
||||||
xo_emit("{:cpu/%3d/%d} ", kipp->ki_oncpu);
|
xo_emit("{:cpu/%3d/%d} ", kipp->ki_oncpu);
|
||||||
else if (kipp->ki_lastcpu != 255)
|
else if (kipp->ki_lastcpu != 255)
|
||||||
|
@ -171,7 +171,7 @@ procstat_kstack(struct procstat *procstat, struct kinfo_proc *kipp, int kflag)
|
|||||||
unsigned int kip_count, kstk_count;
|
unsigned int kip_count, kstk_count;
|
||||||
|
|
||||||
if (!hflag)
|
if (!hflag)
|
||||||
xo_emit("{T:/%5s %6s %-16s %-16s %-29s}\n", "PID", "TID", "COMM",
|
xo_emit("{T:/%5s %6s %-19s %-19s %-29s}\n", "PID", "TID", "COMM",
|
||||||
"TDNAME", "KSTACK");
|
"TDNAME", "KSTACK");
|
||||||
|
|
||||||
kkstp = kkstp_free = procstat_getkstack(procstat, kipp, &kstk_count);
|
kkstp = kkstp_free = procstat_getkstack(procstat, kipp, &kstk_count);
|
||||||
@ -208,10 +208,9 @@ procstat_kstack(struct procstat *procstat, struct kinfo_proc *kipp, int kflag)
|
|||||||
|
|
||||||
xo_emit("{k:process_id/%5d/%d} ", kipp->ki_pid);
|
xo_emit("{k:process_id/%5d/%d} ", kipp->ki_pid);
|
||||||
xo_emit("{:thread_id/%6d/%d} ", kkstp->kkst_tid);
|
xo_emit("{:thread_id/%6d/%d} ", kkstp->kkst_tid);
|
||||||
xo_emit("{:command/%-16s/%s} ", kipp->ki_comm);
|
xo_emit("{:command/%-19s/%s} ", kipp->ki_comm);
|
||||||
xo_emit("{:thread_name/%-16s/%s} ", (strlen(kipp->ki_tdname) &&
|
xo_emit("{:thread_name/%-19s/%s} ",
|
||||||
(strcmp(kipp->ki_comm, kipp->ki_tdname) != 0)) ?
|
kinfo_proc_thread_name(kipp));
|
||||||
kipp->ki_tdname : "-");
|
|
||||||
|
|
||||||
switch (kkstp->kkst_state) {
|
switch (kkstp->kkst_state) {
|
||||||
case KKST_STATE_RUNNING:
|
case KKST_STATE_RUNNING:
|
||||||
|
@ -49,7 +49,7 @@ procstat_threads(struct procstat *procstat, struct kinfo_proc *kipp)
|
|||||||
char *threadid;
|
char *threadid;
|
||||||
|
|
||||||
if (!hflag)
|
if (!hflag)
|
||||||
xo_emit("{T:/%5s %6s %-16s %-16s %2s %4s %-7s %-9s}\n", "PID",
|
xo_emit("{T:/%5s %6s %-19s %-19s %2s %4s %-7s %-9s}\n", "PID",
|
||||||
"TID", "COMM", "TDNAME", "CPU", "PRI", "STATE", "WCHAN");
|
"TID", "COMM", "TDNAME", "CPU", "PRI", "STATE", "WCHAN");
|
||||||
|
|
||||||
xo_emit("{ek:process_id/%d}", kipp->ki_pid);
|
xo_emit("{ek:process_id/%d}", kipp->ki_pid);
|
||||||
@ -71,11 +71,10 @@ procstat_threads(struct procstat *procstat, struct kinfo_proc *kipp)
|
|||||||
xo_open_container(threadid);
|
xo_open_container(threadid);
|
||||||
xo_emit("{dk:process_id/%5d/%d} ", kipp->ki_pid);
|
xo_emit("{dk:process_id/%5d/%d} ", kipp->ki_pid);
|
||||||
xo_emit("{:thread_id/%6d/%d} ", kipp->ki_tid);
|
xo_emit("{:thread_id/%6d/%d} ", kipp->ki_tid);
|
||||||
xo_emit("{d:command/%-16s/%s} ", strlen(kipp->ki_comm) ?
|
xo_emit("{d:command/%-19s/%s} ", strlen(kipp->ki_comm) ?
|
||||||
kipp->ki_comm : "-");
|
kipp->ki_comm : "-");
|
||||||
xo_emit("{:thread_name/%-16s/%s} ", (strlen(kipp->ki_tdname) &&
|
xo_emit("{:thread_name/%-19s/%s} ",
|
||||||
(strcmp(kipp->ki_comm, kipp->ki_tdname) != 0)) ?
|
kinfo_proc_thread_name(kipp));
|
||||||
kipp->ki_tdname : "-");
|
|
||||||
if (kipp->ki_oncpu != 255)
|
if (kipp->ki_oncpu != 255)
|
||||||
xo_emit("{:cpu/%3d/%d} ", kipp->ki_oncpu);
|
xo_emit("{:cpu/%3d/%d} ", kipp->ki_oncpu);
|
||||||
else if (kipp->ki_lastcpu != 255)
|
else if (kipp->ki_lastcpu != 255)
|
||||||
|
@ -991,8 +991,8 @@ format_next_process(caddr_t handle, char *(*get_userid)(int), int flags)
|
|||||||
if (!(flags & FMT_SHOWARGS)) {
|
if (!(flags & FMT_SHOWARGS)) {
|
||||||
if (ps.thread && pp->ki_flag & P_HADTHREADS &&
|
if (ps.thread && pp->ki_flag & P_HADTHREADS &&
|
||||||
pp->ki_tdname[0]) {
|
pp->ki_tdname[0]) {
|
||||||
snprintf(cmdbuf, cmdlen, "%s{%s}", pp->ki_comm,
|
snprintf(cmdbuf, cmdlen, "%s{%s%s}", pp->ki_comm,
|
||||||
pp->ki_tdname);
|
pp->ki_tdname, pp->ki_moretdname);
|
||||||
} else {
|
} else {
|
||||||
snprintf(cmdbuf, cmdlen, "%s", pp->ki_comm);
|
snprintf(cmdbuf, cmdlen, "%s", pp->ki_comm);
|
||||||
}
|
}
|
||||||
@ -1004,7 +1004,8 @@ format_next_process(caddr_t handle, char *(*get_userid)(int), int flags)
|
|||||||
if (ps.thread && pp->ki_flag & P_HADTHREADS &&
|
if (ps.thread && pp->ki_flag & P_HADTHREADS &&
|
||||||
pp->ki_tdname[0]) {
|
pp->ki_tdname[0]) {
|
||||||
snprintf(cmdbuf, cmdlen,
|
snprintf(cmdbuf, cmdlen,
|
||||||
"[%s{%s}]", pp->ki_comm, pp->ki_tdname);
|
"[%s{%s%s}]", pp->ki_comm, pp->ki_tdname,
|
||||||
|
pp->ki_moretdname);
|
||||||
} else {
|
} else {
|
||||||
snprintf(cmdbuf, cmdlen,
|
snprintf(cmdbuf, cmdlen,
|
||||||
"[%s]", pp->ki_comm);
|
"[%s]", pp->ki_comm);
|
||||||
@ -1052,8 +1053,9 @@ format_next_process(caddr_t handle, char *(*get_userid)(int), int flags)
|
|||||||
if (ps.thread && pp->ki_flag & P_HADTHREADS &&
|
if (ps.thread && pp->ki_flag & P_HADTHREADS &&
|
||||||
pp->ki_tdname[0])
|
pp->ki_tdname[0])
|
||||||
snprintf(cmdbuf, cmdlen,
|
snprintf(cmdbuf, cmdlen,
|
||||||
"%s (%s){%s}", argbuf, pp->ki_comm,
|
"%s (%s){%s%s}", argbuf,
|
||||||
pp->ki_tdname);
|
pp->ki_comm, pp->ki_tdname,
|
||||||
|
pp->ki_moretdname);
|
||||||
else
|
else
|
||||||
snprintf(cmdbuf, cmdlen,
|
snprintf(cmdbuf, cmdlen,
|
||||||
"%s (%s)", argbuf, pp->ki_comm);
|
"%s (%s)", argbuf, pp->ki_comm);
|
||||||
@ -1061,7 +1063,8 @@ format_next_process(caddr_t handle, char *(*get_userid)(int), int flags)
|
|||||||
if (ps.thread && pp->ki_flag & P_HADTHREADS &&
|
if (ps.thread && pp->ki_flag & P_HADTHREADS &&
|
||||||
pp->ki_tdname[0])
|
pp->ki_tdname[0])
|
||||||
snprintf(cmdbuf, cmdlen,
|
snprintf(cmdbuf, cmdlen,
|
||||||
"%s{%s}", argbuf, pp->ki_tdname);
|
"%s{%s%s}", argbuf, pp->ki_tdname,
|
||||||
|
pp->ki_moretdname);
|
||||||
else
|
else
|
||||||
strlcpy(cmdbuf, argbuf, cmdlen);
|
strlcpy(cmdbuf, argbuf, cmdlen);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user