socsvn commit: r270544 - soc2014/zkorchev/freebsd_head/usr.bin/procstat
zkorchev at FreeBSD.org
zkorchev at FreeBSD.org
Mon Jul 7 10:32:52 UTC 2014
Author: zkorchev
Date: Mon Jul 7 10:32:48 2014
New Revision: 270544
URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=270544
Log:
added libsol support to procstat
Modified:
soc2014/zkorchev/freebsd_head/usr.bin/procstat/Makefile
soc2014/zkorchev/freebsd_head/usr.bin/procstat/procstat.c
soc2014/zkorchev/freebsd_head/usr.bin/procstat/procstat.h
soc2014/zkorchev/freebsd_head/usr.bin/procstat/procstat_args.c
soc2014/zkorchev/freebsd_head/usr.bin/procstat/procstat_auxv.c
soc2014/zkorchev/freebsd_head/usr.bin/procstat/procstat_basic.c
soc2014/zkorchev/freebsd_head/usr.bin/procstat/procstat_bin.c
soc2014/zkorchev/freebsd_head/usr.bin/procstat/procstat_cred.c
soc2014/zkorchev/freebsd_head/usr.bin/procstat/procstat_files.c
soc2014/zkorchev/freebsd_head/usr.bin/procstat/procstat_kstack.c
soc2014/zkorchev/freebsd_head/usr.bin/procstat/procstat_rlimit.c
soc2014/zkorchev/freebsd_head/usr.bin/procstat/procstat_rusage.c
soc2014/zkorchev/freebsd_head/usr.bin/procstat/procstat_sigs.c
soc2014/zkorchev/freebsd_head/usr.bin/procstat/procstat_threads.c
soc2014/zkorchev/freebsd_head/usr.bin/procstat/procstat_vm.c
Modified: soc2014/zkorchev/freebsd_head/usr.bin/procstat/Makefile
==============================================================================
--- soc2014/zkorchev/freebsd_head/usr.bin/procstat/Makefile Mon Jul 7 10:32:00 2014 (r270543)
+++ soc2014/zkorchev/freebsd_head/usr.bin/procstat/Makefile Mon Jul 7 10:32:48 2014 (r270544)
@@ -16,7 +16,8 @@
procstat_threads.c \
procstat_vm.c
-LDADD+= -lutil -lprocstat -lkvm
+LDADD+= -lutil -lprocstat -lkvm -lsol
DPADD+= ${LIBUTIL} ${LIBPROCSTAT} ${LIBKVM}
+CFLAGS+=-DSOL_ON -I/usr/local/include -g
.include <bsd.prog.mk>
Modified: soc2014/zkorchev/freebsd_head/usr.bin/procstat/procstat.c
==============================================================================
--- soc2014/zkorchev/freebsd_head/usr.bin/procstat/procstat.c Mon Jul 7 10:32:00 2014 (r270543)
+++ soc2014/zkorchev/freebsd_head/usr.bin/procstat/procstat.c Mon Jul 7 10:32:48 2014 (r270544)
@@ -43,6 +43,11 @@
static int sflag, tflag, vflag, xflag;
int hflag, nflag, Cflag, Hflag;
+int sol_format;
+#if defined(SOL_ON)
+struct sol_stream sol_stream;
+#endif
+
static void
usage(void)
{
@@ -250,18 +255,27 @@
prstat = procstat_open_sysctl();
if (prstat == NULL)
errx(1, "procstat_open()");
+#if defined(SOL_ON)
+ sol_format = sol_init(&sol_stream);
+#endif
do {
if (aflag) {
p = procstat_getprocs(prstat, KERN_PROC_PROC, 0, &cnt);
if (p == NULL)
errx(1, "procstat_getprocs()");
kinfo_proc_sort(p, cnt);
+#if defined(SOL_ON)
+ if (sol_format) sol_array_start(&sol_stream);
+#endif
for (i = 0; i < cnt; i++) {
procstat(prstat, &p[i]);
/* Suppress header after first process. */
hflag = 1;
}
+#if defined(SOL_ON)
+ if (sol_format) sol_array_end(&sol_stream);
+#endif
procstat_freeprocs(prstat, p);
}
for (i = 0; i < argc; i++) {
@@ -298,6 +312,9 @@
if (interval)
sleep(interval);
} while (interval);
+#if defined(SOL_ON)
+ if (sol_format) sol_term(&sol_stream);
+#endif
procstat_close(prstat);
exit(0);
}
Modified: soc2014/zkorchev/freebsd_head/usr.bin/procstat/procstat.h
==============================================================================
--- soc2014/zkorchev/freebsd_head/usr.bin/procstat/procstat.h Mon Jul 7 10:32:00 2014 (r270543)
+++ soc2014/zkorchev/freebsd_head/usr.bin/procstat/procstat.h Mon Jul 7 10:32:48 2014 (r270544)
@@ -29,8 +29,17 @@
#ifndef PROCSTAT_H
#define PROCSTAT_H
+#if defined(SOL_ON)
+# include <sol.h>
+#endif
+
extern int hflag, nflag, Cflag, Hflag;
+extern int sol_format;
+#if defined(SOL_ON)
+extern struct sol_stream sol_stream;
+#endif
+
struct kinfo_proc;
void kinfo_proc_sort(struct kinfo_proc *kipp, int count);
Modified: soc2014/zkorchev/freebsd_head/usr.bin/procstat/procstat_args.c
==============================================================================
--- soc2014/zkorchev/freebsd_head/usr.bin/procstat/procstat_args.c Mon Jul 7 10:32:00 2014 (r270543)
+++ soc2014/zkorchev/freebsd_head/usr.bin/procstat/procstat_args.c Mon Jul 7 10:32:48 2014 (r270544)
@@ -46,24 +46,50 @@
int i;
char **args;
- if (!hflag) {
- printf("%5s %-16s %-53s\n", "PID", "COMM",
- env ? "ENVIRONMENT" : "ARGS");
- }
-
args = env ? procstat_getenvv(procstat, kipp, 0) :
procstat_getargv(procstat, kipp, 0);
- printf("%5d %-16s", kipp->ki_pid, kipp->ki_comm);
-
- if (args == NULL) {
- printf(" -\n");
- return;
+#if defined(SOL_ON)
+ if (sol_format)
+ {
+ sol_map_start(&sol_stream);
+ SOL_MAP_KEYL(&sol_stream, "pid");
+ sol_integer(&sol_stream, kipp->ki_pid);
+ SOL_MAP_KEYL(&sol_stream, "cmd");
+ sol_string(&sol_stream, kipp->ki_comm, strlen(kipp->ki_comm));
+ if (env)
+ SOL_MAP_KEYL(&sol_stream, "env");
+ else
+ SOL_MAP_KEYL(&sol_stream, "args");
+ if (args == NULL)
+ sol_string(&sol_stream, "-", 1);
+ else {
+ sol_array_start(&sol_stream);
+ for (i = 0; args[i] != NULL; i++)
+ sol_string(&sol_stream, args[i], strlen(args[i]));
+ sol_array_end(&sol_stream);
+ }
+ sol_map_end(&sol_stream);
+ }
+ else
+#endif
+ {
+ if (!hflag) {
+ printf("%5s %-16s %-53s\n", "PID", "COMM",
+ env ? "ENVIRONMENT" : "ARGS");
+ }
+
+ printf("%5d %-16s", kipp->ki_pid, kipp->ki_comm);
+
+ if (args == NULL) {
+ printf(" -\n");
+ return;
+ }
+
+ for (i = 0; args[i] != NULL; i++)
+ printf(" %s", args[i]);
+ printf("\n");
}
-
- for (i = 0; args[i] != NULL; i++)
- printf(" %s", args[i]);
- printf("\n");
}
void
Modified: soc2014/zkorchev/freebsd_head/usr.bin/procstat/procstat_auxv.c
==============================================================================
--- soc2014/zkorchev/freebsd_head/usr.bin/procstat/procstat_auxv.c Mon Jul 7 10:32:00 2014 (r270543)
+++ soc2014/zkorchev/freebsd_head/usr.bin/procstat/procstat_auxv.c Mon Jul 7 10:32:48 2014 (r270544)
@@ -48,6 +48,12 @@
#define PRINT_UNKNOWN(type, val) \
printf("%s %16ld %#lx\n", prefix, (long)type, (u_long)(val))
+#define SOL_PRINT(name, func, ...) name: \
+ SOL_MAP_KEYL(&sol_stream, "auxv"); \
+ sol_string(&sol_stream, #name, sizeof(#name) - 1); \
+ SOL_MAP_KEYL(&sol_stream, "value"); \
+ func(&sol_stream, __VA_ARGS__)
+
void
procstat_auxv(struct procstat *procstat, struct kinfo_proc *kipp)
{
@@ -55,106 +61,201 @@
u_int count, i;
static char prefix[256];
- if (!hflag)
- printf("%5s %-16s %-16s %-16s\n", "PID", "COMM", "AUXV", "VALUE");
+#if defined(SOL_ON)
+ if (!sol_format)
+#endif
+ if (!hflag)
+ printf("%5s %-16s %-16s %-16s\n", "PID", "COMM", "AUXV", "VALUE");
auxv = procstat_getauxv(procstat, kipp, &count);
if (auxv == NULL)
return;
snprintf(prefix, sizeof(prefix), "%5d %-16s", kipp->ki_pid,
kipp->ki_comm);
for (i = 0; i < count; i++) {
- switch(auxv[i].a_type) {
- case AT_NULL:
- return;
- case AT_IGNORE:
- break;
- case AT_EXECFD:
- PRINT(AT_EXECFD, %ld, (long)auxv[i].a_un.a_val);
- break;
- case AT_PHDR:
- PRINT(AT_PHDR, %p, auxv[i].a_un.a_ptr);
- break;
- case AT_PHENT:
- PRINT(AT_PHENT, %ld, (long)auxv[i].a_un.a_val);
- break;
- case AT_PHNUM:
- PRINT(AT_PHNUM, %ld, (long)auxv[i].a_un.a_val);
- break;
- case AT_PAGESZ:
- PRINT(AT_PAGESZ, %ld, (long)auxv[i].a_un.a_val);
- break;
- case AT_BASE:
- PRINT(AT_BASE, %p, auxv[i].a_un.a_ptr);
- break;
- case AT_FLAGS:
- PRINT(AT_FLAGS, %#lx, (u_long)auxv[i].a_un.a_val);
- break;
- case AT_ENTRY:
- PRINT(AT_ENTRY, %p, auxv[i].a_un.a_ptr);
- break;
+#if defined(SOL_ON)
+ if (sol_format)
+ {
+ if (auxv[i].a_type == AT_NULL) return;
+
+ sol_map_start(&sol_stream);
+ SOL_MAP_KEYL(&sol_stream, "pid");
+ sol_integer(&sol_stream, kipp->ki_pid);
+ SOL_MAP_KEYL(&sol_stream, "cmd");
+ sol_string(&sol_stream, kipp->ki_comm, strlen(kipp->ki_comm));
+ switch(auxv[i].a_type) {
+ case AT_IGNORE:
+ break;
+ case SOL_PRINT(AT_EXECFD, sol_integer, auxv[i].a_un.a_val);
+ break;
+ case SOL_PRINT(AT_PHDR, sol_uinteger, (uintmax_t)auxv[i].a_un.a_ptr);
+ break;
+ case SOL_PRINT(AT_PHENT, sol_integer, (long)auxv[i].a_un.a_val);
+ break;
+ case SOL_PRINT(AT_PHNUM, sol_integer, (long)auxv[i].a_un.a_val);
+ break;
+ case SOL_PRINT(AT_PAGESZ, sol_integer, (long)auxv[i].a_un.a_val);
+ break;
+ case SOL_PRINT(AT_BASE, sol_uinteger, (uintmax_t)auxv[i].a_un.a_ptr);
+ break;
+ case SOL_PRINT(AT_FLAGS, sol_uinteger, (u_long)auxv[i].a_un.a_val);
+ break;
+ case SOL_PRINT(AT_ENTRY, sol_uinteger, (uintmax_t)auxv[i].a_un.a_ptr);
+ break;
+#ifdef AT_NOTELF
+ case SOL_PRINT(AT_NOTELF, sol_integer, (long)auxv[i].a_un.a_val);
+ break;
+#endif
+#ifdef AT_UID
+ case SOL_PRINT(AT_UID, sol_integer, (long)auxv[i].a_un.a_val);
+ break;
+#endif
+#ifdef AT_EUID
+ case SOL_PRINT(AT_EUID, sol_integer, (long)auxv[i].a_un.a_val);
+ break;
+#endif
+#ifdef AT_GID
+ case SOL_PRINT(AT_GID, sol_integer, (long)auxv[i].a_un.a_val);
+ break;
+#endif
+#ifdef AT_EGID
+ case SOL_PRINT(AT_EGID, sol_integer, (long)auxv[i].a_un.a_val);
+ break;
+#endif
+ case SOL_PRINT(AT_EXECPATH, sol_uinteger, (uintmax_t)auxv[i].a_un.a_ptr);
+ break;
+ case SOL_PRINT(AT_CANARY, sol_uinteger, (uintmax_t)auxv[i].a_un.a_ptr);
+ break;
+ case SOL_PRINT(AT_CANARYLEN, sol_integer, (long)auxv[i].a_un.a_val);
+ break;
+ case SOL_PRINT(AT_OSRELDATE, sol_integer, (long)auxv[i].a_un.a_val);
+ break;
+ case SOL_PRINT(AT_NCPUS, sol_integer, (long)auxv[i].a_un.a_val);
+ break;
+ case SOL_PRINT(AT_PAGESIZES, sol_uinteger, (uintmax_t)auxv[i].a_un.a_ptr);
+ break;
+ case SOL_PRINT(AT_PAGESIZESLEN, sol_integer, (long)auxv[i].a_un.a_val);
+ break;
+ case AT_STACKPROT:
+ SOL_MAP_KEYL(&sol_stream, "auxv");
+ sol_string(&sol_stream, "AT_STACKPROT", sizeof("AT_STACKPROT") - 1);
+ SOL_MAP_KEYL(&sol_stream, "value");
+ if ((auxv[i].a_un.a_val & VM_PROT_EXECUTE) != 0)
+ sol_string(&sol_stream, "NONEXECUTABLE", sizeof("NONEXECUTABLE") - 1);
+ else
+ sol_string(&sol_stream, "EXECUTABLE", sizeof("EXECUTABLE") - 1);
+ break;
+#ifdef AT_TIMEKEEP
+ case SOL_PRINT(AT_TIMEKEEP, sol_uinteger, (uintmax_t)auxv[i].a_un.a_ptr);
+ break;
+#endif
+ default:
+ SOL_MAP_KEYL(&sol_stream, "auxv");
+ sol_integer(&sol_stream, (long)auxv[i].a_type);
+ SOL_MAP_KEYL(&sol_stream, "value");
+ sol_uinteger(&sol_stream, (u_long)auxv[i].a_un.a_val);
+ break;
+ }
+ sol_map_end(&sol_stream);
+ }
+ else
+#endif
+ {
+ switch(auxv[i].a_type) {
+ case AT_NULL:
+ return;
+ case AT_IGNORE:
+ break;
+ case AT_EXECFD:
+ PRINT(AT_EXECFD, %ld, (long)auxv[i].a_un.a_val);
+ break;
+ case AT_PHDR:
+ PRINT(AT_PHDR, %p, auxv[i].a_un.a_ptr);
+ break;
+ case AT_PHENT:
+ PRINT(AT_PHENT, %ld, (long)auxv[i].a_un.a_val);
+ break;
+ case AT_PHNUM:
+ PRINT(AT_PHNUM, %ld, (long)auxv[i].a_un.a_val);
+ break;
+ case AT_PAGESZ:
+ PRINT(AT_PAGESZ, %ld, (long)auxv[i].a_un.a_val);
+ break;
+ case AT_BASE:
+ PRINT(AT_BASE, %p, auxv[i].a_un.a_ptr);
+ break;
+ case AT_FLAGS:
+ PRINT(AT_FLAGS, %#lx, (u_long)auxv[i].a_un.a_val);
+ break;
+ case AT_ENTRY:
+ PRINT(AT_ENTRY, %p, auxv[i].a_un.a_ptr);
+ break;
#ifdef AT_NOTELF
- case AT_NOTELF:
- PRINT(AT_NOTELF, %ld, (long)auxv[i].a_un.a_val);
- break;
+ case AT_NOTELF:
+ PRINT(AT_NOTELF, %ld, (long)auxv[i].a_un.a_val);
+ break;
#endif
#ifdef AT_UID
- case AT_UID:
- PRINT(AT_UID, %ld, (long)auxv[i].a_un.a_val);
- break;
+ case AT_UID:
+ PRINT(AT_UID, %ld, (long)auxv[i].a_un.a_val);
+ break;
#endif
#ifdef AT_EUID
- case AT_EUID:
- PRINT(AT_EUID, %ld, (long)auxv[i].a_un.a_val);
- break;
+ case AT_EUID:
+ PRINT(AT_EUID, %ld, (long)auxv[i].a_un.a_val);
+ break;
#endif
#ifdef AT_GID
- case AT_GID:
- PRINT(AT_GID, %ld, (long)auxv[i].a_un.a_val);
- break;
+ case AT_GID:
+ PRINT(AT_GID, %ld, (long)auxv[i].a_un.a_val);
+ break;
#endif
#ifdef AT_EGID
- case AT_EGID:
- PRINT(AT_EGID, %ld, (long)auxv[i].a_un.a_val);
- break;
-#endif
- case AT_EXECPATH:
- PRINT(AT_EXECPATH, %p, auxv[i].a_un.a_ptr);
- break;
- case AT_CANARY:
- PRINT(AT_CANARY, %p, auxv[i].a_un.a_ptr);
- break;
- case AT_CANARYLEN:
- PRINT(AT_CANARYLEN, %ld, (long)auxv[i].a_un.a_val);
- break;
- case AT_OSRELDATE:
- PRINT(AT_OSRELDATE, %ld, (long)auxv[i].a_un.a_val);
- break;
- case AT_NCPUS:
- PRINT(AT_NCPUS, %ld, (long)auxv[i].a_un.a_val);
- break;
- case AT_PAGESIZES:
- PRINT(AT_PAGESIZES, %p, auxv[i].a_un.a_ptr);
- break;
- case AT_PAGESIZESLEN:
- PRINT(AT_PAGESIZESLEN, %ld, (long)auxv[i].a_un.a_val);
- break;
- case AT_STACKPROT:
- if ((auxv[i].a_un.a_val & VM_PROT_EXECUTE) != 0)
- PRINT(AT_STACKPROT, %s, "NONEXECUTABLE");
- else
- PRINT(AT_STACKPROT, %s, "EXECUTABLE");
- break;
+ case AT_EGID:
+ PRINT(AT_EGID, %ld, (long)auxv[i].a_un.a_val);
+ break;
+#endif
+ case AT_EXECPATH:
+ PRINT(AT_EXECPATH, %p, auxv[i].a_un.a_ptr);
+ break;
+ case AT_CANARY:
+ PRINT(AT_CANARY, %p, auxv[i].a_un.a_ptr);
+ break;
+ case AT_CANARYLEN:
+ PRINT(AT_CANARYLEN, %ld, (long)auxv[i].a_un.a_val);
+ break;
+ case AT_OSRELDATE:
+ PRINT(AT_OSRELDATE, %ld, (long)auxv[i].a_un.a_val);
+ break;
+ case AT_NCPUS:
+ PRINT(AT_NCPUS, %ld, (long)auxv[i].a_un.a_val);
+ break;
+ case AT_PAGESIZES:
+ PRINT(AT_PAGESIZES, %p, auxv[i].a_un.a_ptr);
+ break;
+ case AT_PAGESIZESLEN:
+ PRINT(AT_PAGESIZESLEN, %ld, (long)auxv[i].a_un.a_val);
+ break;
+ case AT_STACKPROT:
+ if ((auxv[i].a_un.a_val & VM_PROT_EXECUTE) != 0)
+ PRINT(AT_STACKPROT, %s, "NONEXECUTABLE");
+ else
+ PRINT(AT_STACKPROT, %s, "EXECUTABLE");
+ break;
#ifdef AT_TIMEKEEP
- case AT_TIMEKEEP:
- PRINT(AT_TIMEKEEP, %p, auxv[i].a_un.a_ptr);
- break;
-#endif
- default:
- PRINT_UNKNOWN(auxv[i].a_type, auxv[i].a_un.a_val);
- break;
+ case AT_TIMEKEEP:
+ PRINT(AT_TIMEKEEP, %p, auxv[i].a_un.a_ptr);
+ break;
+#endif
+ default:
+ PRINT_UNKNOWN(auxv[i].a_type, auxv[i].a_un.a_val);
+ break;
+ }
}
}
- printf("\n");
+#if defined(SOL_ON)
+ if (!sol_format)
+#endif
+ printf("\n");
procstat_freeauxv(procstat, auxv);
}
Modified: soc2014/zkorchev/freebsd_head/usr.bin/procstat/procstat_basic.c
==============================================================================
--- soc2014/zkorchev/freebsd_head/usr.bin/procstat/procstat_basic.c Mon Jul 7 10:32:00 2014 (r270543)
+++ soc2014/zkorchev/freebsd_head/usr.bin/procstat/procstat_basic.c Mon Jul 7 10:32:48 2014 (r270544)
@@ -41,25 +41,56 @@
procstat_basic(struct kinfo_proc *kipp)
{
- if (!hflag)
- printf("%5s %5s %5s %5s %5s %3s %-8s %-9s %-13s %-12s\n",
- "PID", "PPID", "PGID", "SID", "TSID", "THR", "LOGIN",
- "WCHAN", "EMUL", "COMM");
+#if defined(SOL_ON)
+ if (sol_format)
+ {
+ sol_map_start(&sol_stream);
+ SOL_MAP_KEYL(&sol_stream, "pid");
+ sol_integer(&sol_stream, kipp->ki_pid);
+ SOL_MAP_KEYL(&sol_stream, "ppid");
+ sol_integer(&sol_stream, kipp->ki_ppid);
+ SOL_MAP_KEYL(&sol_stream, "pgid");
+ sol_integer(&sol_stream, kipp->ki_pgid);
+ SOL_MAP_KEYL(&sol_stream, "sid");
+ sol_integer(&sol_stream, kipp->ki_sid);
+ SOL_MAP_KEYL(&sol_stream, "tsid");
+ sol_integer(&sol_stream, kipp->ki_tsid);
+ SOL_MAP_KEYL(&sol_stream, "threads");
+ sol_integer(&sol_stream, kipp->ki_numthreads);
+ SOL_MAP_KEYL(&sol_stream, "login");
+ sol_string(&sol_stream, kipp->ki_login, strlen(kipp->ki_login));
+ SOL_MAP_KEYL(&sol_stream, "wchan");
+ if (kipp->ki_kiflag & KI_LOCKBLOCK) sol_string(&sol_stream, kipp->ki_lockname, strlen(kipp->ki_lockname));
+ else sol_string(&sol_stream, kipp->ki_wmesg, strlen(kipp->ki_wmesg));
+ SOL_MAP_KEYL(&sol_stream, "emul");
+ sol_string(&sol_stream, kipp->ki_emul, strlen(kipp->ki_emul));
+ SOL_MAP_KEYL(&sol_stream, "cmd");
+ sol_string(&sol_stream, kipp->ki_comm, strlen(kipp->ki_comm));
+ sol_map_end(&sol_stream);
+ }
+ else
+#endif
+ {
+ if (!hflag)
+ printf("%5s %5s %5s %5s %5s %3s %-8s %-9s %-13s %-12s\n",
+ "PID", "PPID", "PGID", "SID", "TSID", "THR", "LOGIN",
+ "WCHAN", "EMUL", "COMM");
- printf("%5d ", kipp->ki_pid);
- printf("%5d ", kipp->ki_ppid);
- printf("%5d ", kipp->ki_pgid);
- printf("%5d ", kipp->ki_sid);
- printf("%5d ", kipp->ki_tsid);
- printf("%3d ", kipp->ki_numthreads);
- printf("%-8s ", strlen(kipp->ki_login) ? kipp->ki_login : "-");
- if (kipp->ki_kiflag & KI_LOCKBLOCK) {
- printf("*%-8s ", strlen(kipp->ki_lockname) ?
- kipp->ki_lockname : "-");
- } else {
- printf("%-9s ", strlen(kipp->ki_wmesg) ?
- kipp->ki_wmesg : "-");
+ printf("%5d ", kipp->ki_pid);
+ printf("%5d ", kipp->ki_ppid);
+ printf("%5d ", kipp->ki_pgid);
+ printf("%5d ", kipp->ki_sid);
+ printf("%5d ", kipp->ki_tsid);
+ printf("%3d ", kipp->ki_numthreads);
+ printf("%-8s ", strlen(kipp->ki_login) ? kipp->ki_login : "-");
+ if (kipp->ki_kiflag & KI_LOCKBLOCK) {
+ printf("*%-8s ", strlen(kipp->ki_lockname) ?
+ kipp->ki_lockname : "-");
+ } else {
+ printf("%-9s ", strlen(kipp->ki_wmesg) ?
+ kipp->ki_wmesg : "-");
+ }
+ printf("%-13s ", strcmp(kipp->ki_emul, "null") ? kipp->ki_emul : "-");
+ printf("%-12s\n", kipp->ki_comm);
}
- printf("%-13s ", strcmp(kipp->ki_emul, "null") ? kipp->ki_emul : "-");
- printf("%-12s\n", kipp->ki_comm);
}
Modified: soc2014/zkorchev/freebsd_head/usr.bin/procstat/procstat_bin.c
==============================================================================
--- soc2014/zkorchev/freebsd_head/usr.bin/procstat/procstat_bin.c Mon Jul 7 10:32:00 2014 (r270543)
+++ soc2014/zkorchev/freebsd_head/usr.bin/procstat/procstat_bin.c Mon Jul 7 10:32:48 2014 (r270544)
@@ -44,19 +44,40 @@
{
int osrel;
static char pathname[PATH_MAX];
-
- if (!hflag)
- printf("%5s %-16s %8s %s\n", "PID", "COMM", "OSREL", "PATH");
+ size_t pathlen;
if (procstat_getpathname(prstat, kipp, pathname, sizeof(pathname)) != 0)
return;
- if (strlen(pathname) == 0)
+ pathlen = strlen(pathname);
+ if (pathlen == 0) {
strcpy(pathname, "-");
+ pathlen = 1;
+ }
if (procstat_getosrel(prstat, kipp, &osrel) != 0)
return;
- printf("%5d ", kipp->ki_pid);
- printf("%-16s ", kipp->ki_comm);
- printf("%8d ", osrel);
- printf("%s\n", pathname);
+#if defined(SOL_ON)
+ if (sol_format)
+ {
+ sol_map_start(&sol_stream);
+ SOL_MAP_KEYL(&sol_stream, "pid");
+ sol_integer(&sol_stream, kipp->ki_pid);
+ SOL_MAP_KEYL(&sol_stream, "cmd");
+ sol_string(&sol_stream, kipp->ki_comm, strlen(kipp->ki_comm));
+ SOL_MAP_KEYL(&sol_stream, "osrel");
+ sol_integer(&sol_stream, osrel);
+ SOL_MAP_KEYL(&sol_stream, "path");
+ sol_string(&sol_stream, pathname, strlen(pathname));
+ sol_map_end(&sol_stream);
+ }
+ else
+#endif
+ {
+ if (!hflag)
+ printf("%5s %-16s %8s %s\n", "PID", "COMM", "OSREL", "PATH");
+ printf("%5d ", kipp->ki_pid);
+ printf("%-16s ", kipp->ki_comm);
+ printf("%8d ", osrel);
+ printf("%s\n", pathname);
+ }
}
Modified: soc2014/zkorchev/freebsd_head/usr.bin/procstat/procstat_cred.c
==============================================================================
--- soc2014/zkorchev/freebsd_head/usr.bin/procstat/procstat_cred.c Mon Jul 7 10:32:00 2014 (r270543)
+++ soc2014/zkorchev/freebsd_head/usr.bin/procstat/procstat_cred.c Mon Jul 7 10:32:48 2014 (r270544)
@@ -34,6 +34,7 @@
#include <libprocstat.h>
#include <stdlib.h>
#include <stdio.h>
+#include <string.h>
#include <unistd.h>
#include "procstat.h"
@@ -47,22 +48,54 @@
unsigned int i, ngroups;
gid_t *groups;
- if (!hflag)
- printf("%5s %-16s %5s %5s %5s %5s %5s %5s %5s %5s %-15s\n",
- "PID", "COMM", "EUID", "RUID", "SVUID", "EGID", "RGID",
- "SVGID", "UMASK", "FLAGS", "GROUPS");
-
- printf("%5d ", kipp->ki_pid);
- printf("%-16s ", kipp->ki_comm);
- printf("%5d ", kipp->ki_uid);
- printf("%5d ", kipp->ki_ruid);
- printf("%5d ", kipp->ki_svuid);
- printf("%5d ", kipp->ki_groups[0]);
- printf("%5d ", kipp->ki_rgid);
- printf("%5d ", kipp->ki_svgid);
- printf("%5s ", get_umask(procstat, kipp));
- printf("%s", kipp->ki_cr_flags & CRED_FLAG_CAPMODE ? "C" : "-");
- printf(" ");
+
+#if defined(SOL_ON)
+ if (sol_format)
+ {
+ const char *mask = get_umask(procstat, kipp);
+
+ sol_map_start(&sol_stream);
+ SOL_MAP_KEYL(&sol_stream, "pid");
+ sol_integer(&sol_stream, kipp->ki_pid);
+ SOL_MAP_KEYL(&sol_stream, "cmd");
+ sol_string(&sol_stream, kipp->ki_comm, strlen(kipp->ki_comm));
+ SOL_MAP_KEYL(&sol_stream, "euid");
+ sol_integer(&sol_stream, kipp->ki_uid);
+ SOL_MAP_KEYL(&sol_stream, "ruid");
+ sol_integer(&sol_stream, kipp->ki_ruid);
+ SOL_MAP_KEYL(&sol_stream, "svuid");
+ sol_integer(&sol_stream, kipp->ki_svuid);
+ SOL_MAP_KEYL(&sol_stream, "egid");
+ sol_integer(&sol_stream, kipp->ki_groups[0]);
+ SOL_MAP_KEYL(&sol_stream, "rgid");
+ sol_integer(&sol_stream, kipp->ki_rgid);
+ SOL_MAP_KEYL(&sol_stream, "svgid");
+ sol_integer(&sol_stream, kipp->ki_svgid);
+ SOL_MAP_KEYL(&sol_stream, "umask");
+ sol_string(&sol_stream, mask, strlen(mask));
+ SOL_MAP_KEYL(&sol_stream, "flags");
+ sol_string(&sol_stream, kipp->ki_cr_flags & CRED_FLAG_CAPMODE ? "C" : "-", 1);
+ }
+ else
+#endif
+ {
+ if (!hflag)
+ printf("%5s %-16s %5s %5s %5s %5s %5s %5s %5s %5s %-15s\n",
+ "PID", "COMM", "EUID", "RUID", "SVUID", "EGID", "RGID",
+ "SVGID", "UMASK", "FLAGS", "GROUPS");
+
+ printf("%5d ", kipp->ki_pid);
+ printf("%-16s ", kipp->ki_comm);
+ printf("%5d ", kipp->ki_uid);
+ printf("%5d ", kipp->ki_ruid);
+ printf("%5d ", kipp->ki_svuid);
+ printf("%5d ", kipp->ki_groups[0]);
+ printf("%5d ", kipp->ki_rgid);
+ printf("%5d ", kipp->ki_svgid);
+ printf("%5s ", get_umask(procstat, kipp));
+ printf("%s", kipp->ki_cr_flags & CRED_FLAG_CAPMODE ? "C" : "-");
+ printf(" ");
+ }
groups = NULL;
/*
@@ -76,12 +109,30 @@
ngroups = kipp->ki_ngroups;
groups = kipp->ki_groups;
}
- for (i = 0; i < ngroups; i++)
- printf("%s%d", (i > 0) ? "," : "", groups[i]);
+#if defined(SOL_ON)
+ if (sol_format)
+ {
+ SOL_MAP_KEYL(&sol_stream, "groups");
+ sol_array_start(&sol_stream);
+ for (i = 0; i < ngroups; i++)
+ sol_integer(&sol_stream, groups[i]);
+ sol_array_end(&sol_stream);
+ }
+ else
+#endif
+ {
+ for (i = 0; i < ngroups; i++)
+ printf("%s%d", (i > 0) ? "," : "", groups[i]);
+ }
if (groups != kipp->ki_groups)
procstat_freegroups(procstat, groups);
- printf("\n");
+#if defined(SOL_ON)
+ if (sol_format)
+ sol_map_end(&sol_stream);
+ else
+#endif
+ printf("\n");
}
static const char *
Modified: soc2014/zkorchev/freebsd_head/usr.bin/procstat/procstat_files.c
==============================================================================
--- soc2014/zkorchev/freebsd_head/usr.bin/procstat/procstat_files.c Mon Jul 7 10:32:00 2014 (r270543)
+++ soc2014/zkorchev/freebsd_head/usr.bin/procstat/procstat_files.c Mon Jul 7 10:32:48 2014 (r270544)
@@ -129,7 +129,12 @@
char addr[PATH_MAX];
addr_to_string(ss, addr, sizeof(addr));
- printf("%s", addr);
+#if defined(SOL_ON)
+ if (sol_format)
+ sol_string(&sol_stream, addr, strlen(addr));
+ else
+#endif
+ printf("%s", addr);
}
static struct cap_desc {
@@ -265,23 +270,40 @@
static void
print_capability(cap_rights_t *rightsp, u_int capwidth)
{
- u_int count, i, width;
+ u_int i;
- count = 0;
- width = 0;
- for (i = width_capability(rightsp); i < capwidth; i++) {
- if (i != 0)
- printf(" ");
- else
- printf("-");
+#if defined(SOL_ON)
+ if (sol_format)
+ {
+ sol_array_start(&sol_stream);
+ for (i = 0; i < cap_desc_count; i++)
+ if (cap_rights_is_set(rightsp, cap_desc[i].cd_right))
+ sol_string(&sol_stream,
+ cap_desc[i].cd_desc,
+ strlen(cap_desc[i].cd_desc));
+ sol_array_end(&sol_stream);
}
- for (i = 0; i < cap_desc_count; i++) {
- if (cap_rights_is_set(rightsp, cap_desc[i].cd_right)) {
- printf("%s%s", count ? "," : "", cap_desc[i].cd_desc);
- width += strlen(cap_desc[i].cd_desc);
- if (count)
- width++;
- count++;
+ else
+#endif
+ {
+ u_int count, width;
+
+ count = 0;
+ width = 0;
+ for (i = width_capability(rightsp); i < capwidth; i++) {
+ if (i != 0)
+ printf(" ");
+ else
+ printf("-");
+ }
+ for (i = 0; i < cap_desc_count; i++) {
+ if (cap_rights_is_set(rightsp, cap_desc[i].cd_right)) {
+ printf("%s%s", count ? "," : "", cap_desc[i].cd_desc);
+ width += strlen(cap_desc[i].cd_desc);
+ if (count)
+ width++;
+ count++;
+ }
}
}
}
@@ -296,6 +318,7 @@
struct vnstat vn;
u_int capwidth, width;
int error;
+ char flags[9], *flag;
/*
* To print the header in capability mode, we need to know the width
@@ -315,7 +338,11 @@
capwidth = strlen("CAPABILITIES");
}
+#if defined(SOL_ON)
+ if (!hflag && !sol_format) {
+#else
if (!hflag) {
+#endif
if (Cflag)
printf("%5s %-16s %4s %1s %-9s %-*s "
"%-3s %-12s\n", "PID", "COMM", "FD", "T",
@@ -329,23 +356,53 @@
if (head == NULL)
return;
+#if defined(SOL_ON)
+ if (sol_format) sol_array_start(&sol_stream);
+#endif
STAILQ_FOREACH(fst, head, next) {
- printf("%5d ", kipp->ki_pid);
- printf("%-16s ", kipp->ki_comm);
- if (fst->fs_uflags & PS_FST_UFLAG_CTTY)
- printf(" ctty ");
- else if (fst->fs_uflags & PS_FST_UFLAG_CDIR)
- printf(" cwd ");
- else if (fst->fs_uflags & PS_FST_UFLAG_JAIL)
- printf(" jail ");
- else if (fst->fs_uflags & PS_FST_UFLAG_RDIR)
- printf(" root ");
- else if (fst->fs_uflags & PS_FST_UFLAG_TEXT)
- printf(" text ");
- else if (fst->fs_uflags & PS_FST_UFLAG_TRACE)
- printf("trace ");
+#if defined(SOL_ON)
+ if (sol_format) {
+ sol_map_start(&sol_stream);
+ SOL_MAP_KEYL(&sol_stream, "pid");
+ sol_integer(&sol_stream, kipp->ki_pid);
+ SOL_MAP_KEYL(&sol_stream, "cmd");
+ sol_string(&sol_stream, kipp->ki_comm, strlen(kipp->ki_comm));
+ SOL_MAP_KEYL(&sol_stream, "fd");
+ if (fst->fs_uflags & PS_FST_UFLAG_CTTY)
+ sol_string(&sol_stream, "ctty", 4);
+ else if (fst->fs_uflags & PS_FST_UFLAG_CDIR)
+ sol_string(&sol_stream, "cwd", 3);
+ else if (fst->fs_uflags & PS_FST_UFLAG_JAIL)
+ sol_string(&sol_stream, "jail", 4);
+ else if (fst->fs_uflags & PS_FST_UFLAG_RDIR)
+ sol_string(&sol_stream, "root", 4);
+ else if (fst->fs_uflags & PS_FST_UFLAG_TEXT)
+ sol_string(&sol_stream, "text", 4);
+ else if (fst->fs_uflags & PS_FST_UFLAG_TRACE)
+ sol_string(&sol_stream, "trace", 5);
+ else
+ sol_integer(&sol_stream, fst->fs_fd);
+ }
else
- printf("%5d ", fst->fs_fd);
+#endif
+ {
+ printf("%5d ", kipp->ki_pid);
+ printf("%-16s ", kipp->ki_comm);
+ if (fst->fs_uflags & PS_FST_UFLAG_CTTY)
+ printf(" ctty ");
+ else if (fst->fs_uflags & PS_FST_UFLAG_CDIR)
+ printf(" cwd ");
+ else if (fst->fs_uflags & PS_FST_UFLAG_JAIL)
+ printf(" jail ");
+ else if (fst->fs_uflags & PS_FST_UFLAG_RDIR)
+ printf(" root ");
+ else if (fst->fs_uflags & PS_FST_UFLAG_TEXT)
+ printf(" text ");
+ else if (fst->fs_uflags & PS_FST_UFLAG_TRACE)
+ printf("trace ");
+ else
+ printf("%5d ", fst->fs_fd);
+ }
switch (fst->fs_type) {
case PS_FST_TYPE_VNODE:
@@ -394,7 +451,14 @@
str = "?";
break;
}
- printf("%1s ", str);
+#if defined(SOL_ON)
+ if (sol_format) {
+ SOL_MAP_KEYL(&sol_stream, "type");
+ sol_string(&sol_stream, str, 1);
+ }
+ else
+#endif
+ printf("%1s ", str);
if (!Cflag) {
str = "-";
if (fst->fs_type == PS_FST_TYPE_VNODE) {
@@ -440,38 +504,85 @@
break;
}
}
- printf("%1s ", str);
+#if defined(SOL_ON)
+ if (sol_format) {
+ SOL_MAP_KEYL(&sol_stream, "vtype");
+ sol_string(&sol_stream, str, 1);
+ }
+ else
+#endif
+ printf("%1s ", str);
}
- printf("%s", fst->fs_fflags & PS_FST_FFLAG_READ ? "r" : "-");
- printf("%s", fst->fs_fflags & PS_FST_FFLAG_WRITE ? "w" : "-");
- printf("%s", fst->fs_fflags & PS_FST_FFLAG_APPEND ? "a" : "-");
- printf("%s", fst->fs_fflags & PS_FST_FFLAG_ASYNC ? "s" : "-");
- printf("%s", fst->fs_fflags & PS_FST_FFLAG_SYNC ? "f" : "-");
- printf("%s", fst->fs_fflags & PS_FST_FFLAG_NONBLOCK ? "n" : "-");
- printf("%s", fst->fs_fflags & PS_FST_FFLAG_DIRECT ? "d" : "-");
- printf("%s", fst->fs_fflags & PS_FST_FFLAG_HASLOCK ? "l" : "-");
+
+ flag = flags;
+ *flag++ = (fst->fs_fflags & PS_FST_FFLAG_READ ? 'r' : '-');
+ *flag++ = (fst->fs_fflags & PS_FST_FFLAG_WRITE ? 'w' : '-');
+ *flag++ = (fst->fs_fflags & PS_FST_FFLAG_APPEND ? 'a' : '-');
+ *flag++ = (fst->fs_fflags & PS_FST_FFLAG_ASYNC ? 's' : '-');
+ *flag++ = (fst->fs_fflags & PS_FST_FFLAG_SYNC ? 'f' : '-');
+ *flag++ = (fst->fs_fflags & PS_FST_FFLAG_NONBLOCK ? 'n' : '-');
+ *flag++ = (fst->fs_fflags & PS_FST_FFLAG_DIRECT ? 'd' : '-');
+ *flag++ = (fst->fs_fflags & PS_FST_FFLAG_HASLOCK ? 'l' : '-');
+ *flag = 0;
+#if defined(SOL_ON)
+ if (sol_format)
+ {
+ SOL_MAP_KEYL(&sol_stream, "flags");
+ sol_string(&sol_stream, flags, sizeof(flags) - 1);
+ }
+ else
+#endif
+ printf("%s", flags);
+
if (!Cflag) {
- if (fst->fs_ref_count > -1)
- printf("%3d ", fst->fs_ref_count);
- else
- printf("%3c ", '-');
- if (fst->fs_offset > -1)
- printf("%7jd ", (intmax_t)fst->fs_offset);
+#if defined(SOL_ON)
+ if (sol_format)
+ {
+ if (fst->fs_ref_count > -1) {
+ SOL_MAP_KEYL(&sol_stream, "ref");
+ sol_integer(&sol_stream, fst->fs_ref_count);
+ }
+ if (fst->fs_offset > -1) {
+ SOL_MAP_KEYL(&sol_stream, "offset");
+ sol_integer(&sol_stream, fst->fs_offset);
+ }
+ }
else
- printf("%7c ", '-');
+#endif
+ {
+ if (fst->fs_ref_count > -1)
+ printf("%3d ", fst->fs_ref_count);
+ else
+ printf("%3c ", '-');
+ if (fst->fs_offset > -1)
+ printf("%7jd ", (intmax_t)fst->fs_offset);
+ else
+ printf("%7c ", '-');
+ }
}
if (Cflag) {
print_capability(&fst->fs_cap_rights, capwidth);
- printf(" ");
+#if defined(SOL_ON)
+ if (!sol_format)
+#endif
+ printf(" ");
}
switch (fst->fs_type) {
case PS_FST_TYPE_SOCKET:
error = procstat_get_socket_info(procstat, fst, &sock, NULL);
if (error != 0)
break;
- printf("%-3s ",
- protocol_to_string(sock.dom_family,
- sock.type, sock.proto));
+#if defined(SOL_ON)
+ if (sol_format) {
+ const char *pro = protocol_to_string(sock.dom_family, sock.type, sock.proto);
+ SOL_MAP_KEYL(&sol_stream, "protocol");
+ sol_string(&sol_stream, pro, strlen(pro));
+ }
+ else
+#endif
+ printf("%-3s ",
+ protocol_to_string(sock.dom_family,
+ sock.type, sock.proto));
/*
* While generally we like to print two addresses,
* local and peer, for sockets, it turns out to be
@@ -483,23 +594,63 @@
struct sockaddr_un *sun =
(struct sockaddr_un *)&sock.sa_local;
- if (sun->sun_path[0] != 0)
+ if (sun->sun_path[0] != 0) {
+#if defined(SOL_ON)
+ if (sol_format) SOL_MAP_KEYL(&sol_stream, "local");
+#endif
print_address(&sock.sa_local);
- else
+ }
+ else {
+#if defined(SOL_ON)
+ if (sol_format) SOL_MAP_KEYL(&sol_stream, "peer");
+#endif
print_address(&sock.sa_peer);
+ }
} else {
- print_address(&sock.sa_local);
- printf(" ");
- print_address(&sock.sa_peer);
+#if defined(SOL_ON)
*** DIFF OUTPUT TRUNCATED AT 1000 LINES ***
More information about the svn-soc-all
mailing list