svn commit: r249680 - head/usr.bin/procstat
Mikolaj Golub
trociny at FreeBSD.org
Sat Apr 20 08:08:30 UTC 2013
Author: trociny
Date: Sat Apr 20 08:08:29 2013
New Revision: 249680
URL: http://svnweb.freebsd.org/changeset/base/249680
Log:
Use libprocstat(3) to retrieve process command line arguments and
environment variables.
MFC after: 1 month
Modified:
head/usr.bin/procstat/procstat.c
head/usr.bin/procstat/procstat.h
head/usr.bin/procstat/procstat_args.c
Modified: head/usr.bin/procstat/procstat.c
==============================================================================
--- head/usr.bin/procstat/procstat.c Sat Apr 20 08:07:04 2013 (r249679)
+++ head/usr.bin/procstat/procstat.c Sat Apr 20 08:08:29 2013 (r249680)
@@ -61,9 +61,9 @@ procstat(struct procstat *prstat, struct
if (bflag)
procstat_bin(prstat, kipp);
else if (cflag)
- procstat_args(kipp);
+ procstat_args(prstat, kipp);
else if (eflag)
- procstat_env(kipp);
+ procstat_env(prstat, kipp);
else if (fflag)
procstat_files(prstat, kipp);
else if (iflag)
Modified: head/usr.bin/procstat/procstat.h
==============================================================================
--- head/usr.bin/procstat/procstat.h Sat Apr 20 08:07:04 2013 (r249679)
+++ head/usr.bin/procstat/procstat.h Sat Apr 20 08:08:29 2013 (r249680)
@@ -34,12 +34,12 @@ extern int hflag, nflag, Cflag;
struct kinfo_proc;
void kinfo_proc_sort(struct kinfo_proc *kipp, int count);
-void procstat_args(struct kinfo_proc *kipp);
+void procstat_args(struct procstat *prstat, struct kinfo_proc *kipp);
void procstat_auxv(struct kinfo_proc *kipp);
void procstat_basic(struct kinfo_proc *kipp);
void procstat_bin(struct procstat *prstat, struct kinfo_proc *kipp);
void procstat_cred(struct procstat *prstat, struct kinfo_proc *kipp);
-void procstat_env(struct kinfo_proc *kipp);
+void procstat_env(struct procstat *prstat, struct kinfo_proc *kipp);
void procstat_files(struct procstat *prstat, struct kinfo_proc *kipp);
void procstat_kstack(struct kinfo_proc *kipp, int kflag);
void procstat_rlimit(struct procstat *prstat, struct kinfo_proc *kipp);
Modified: head/usr.bin/procstat/procstat_args.c
==============================================================================
--- head/usr.bin/procstat/procstat_args.c Sat Apr 20 08:07:04 2013 (r249679)
+++ head/usr.bin/procstat/procstat_args.c Sat Apr 20 08:08:29 2013 (r249680)
@@ -40,52 +40,40 @@
#include "procstat.h"
-static char args[ARG_MAX];
-
static void
-do_args(struct kinfo_proc *kipp, int env)
+do_args(struct procstat *procstat, struct kinfo_proc *kipp, int env)
{
- int error, name[4];
- size_t len;
- char *cp;
+ int i;
+ char **args;
- if (!hflag)
+ if (!hflag) {
printf("%5s %-16s %-53s\n", "PID", "COMM",
env ? "ENVIRONMENT" : "ARGS");
-
- name[0] = CTL_KERN;
- name[1] = KERN_PROC;
- name[2] = env ? KERN_PROC_ENV : KERN_PROC_ARGS;
- name[3] = kipp->ki_pid;
- len = sizeof(args);
- error = sysctl(name, 4, args, &len, NULL, 0);
- if (error < 0 && errno != ESRCH && errno != EPERM) {
- warn("sysctl: kern.proc.%s: %d: %d", env ? "env" : "args",
- kipp->ki_pid, errno);
- return;
}
- if (error < 0)
+
+ 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 (len == 0 || strlen(args) == 0) {
- strcpy(args, "-");
- len = strlen(args) + 1;
}
- printf("%5d ", kipp->ki_pid);
- printf("%-16s ", kipp->ki_comm);
- for (cp = args; cp < args + len; cp += strlen(cp) + 1)
- printf("%s%s", cp != args ? " " : "", cp);
+ for (i = 0; args[i] != NULL; i++)
+ printf(" %s", args[i]);
printf("\n");
}
void
-procstat_args(struct kinfo_proc *kipp)
+procstat_args(struct procstat *procstat, struct kinfo_proc *kipp)
{
- do_args(kipp, 0);
+ do_args(procstat, kipp, 0);
}
void
-procstat_env(struct kinfo_proc *kipp)
+procstat_env(struct procstat *procstat, struct kinfo_proc *kipp)
{
- do_args(kipp, 1);
+ do_args(procstat, kipp, 1);
}
More information about the svn-src-all
mailing list