summaryrefslogtreecommitdiffstats
path: root/usr.bin
diff options
context:
space:
mode:
authormckusick <mckusick@FreeBSD.org>2000-12-12 07:25:57 +0000
committermckusick <mckusick@FreeBSD.org>2000-12-12 07:25:57 +0000
commitcba301121bc106aaff382428a55f31fef30844e6 (patch)
tree910e5652e5d16d5d0d4e8480f7e386aaf0ca310e /usr.bin
parentd577ae457b219ac16b4e152a40ae4d7474c4622f (diff)
downloadFreeBSD-src-cba301121bc106aaff382428a55f31fef30844e6.zip
FreeBSD-src-cba301121bc106aaff382428a55f31fef30844e6.tar.gz
Change the proc information returned from the kernel so that it
no longer contains kernel specific data structures, but rather only scalar values and structures that are already part of the kernel/user interface, specifically rusage and rtprio. It no longer contains proc, session, pcred, ucred, procsig, vmspace, pstats, mtx, sigiolst, klist, callout, pasleep, or mdproc. If any of these changed in size, ps, w, fstat, gcore, systat, and top would all stop working. The new structure has over 200 bytes of unassigned space for future values to be added, yet is nearly 100 bytes smaller per entry than the structure that it replaced.
Diffstat (limited to 'usr.bin')
-rw-r--r--usr.bin/fstat/fstat.c37
-rw-r--r--usr.bin/gcore/aoutcore.c45
-rw-r--r--usr.bin/gcore/gcore.c45
-rw-r--r--usr.bin/systat/pigs.c16
-rw-r--r--usr.bin/top/machine.c90
-rw-r--r--usr.bin/w/extern.h6
-rw-r--r--usr.bin/w/proc_compare.c30
-rw-r--r--usr.bin/w/w.c22
8 files changed, 136 insertions, 155 deletions
diff --git a/usr.bin/fstat/fstat.c b/usr.bin/fstat/fstat.c
index 02da6cc..427611d 100644
--- a/usr.bin/fstat/fstat.c
+++ b/usr.bin/fstat/fstat.c
@@ -253,7 +253,7 @@ main(argc, argv)
putchar('\n');
for (plast = &p[cnt]; p < plast; ++p) {
- if (p->kp_proc.p_stat == SZOMB)
+ if (p->ki_stat == SZOMB)
continue;
dofiles(p);
if (mflg)
@@ -298,18 +298,16 @@ dofiles(kp)
struct file file;
struct filedesc0 filed0;
#define filed filed0.fd_fd
- struct proc *p = &kp->kp_proc;
- struct eproc *ep = &kp->kp_eproc;
- Uname = user_from_uid(ep->e_ucred.cr_uid, 0);
- Pid = p->p_pid;
- Comm = p->p_comm;
+ Uname = user_from_uid(kp->ki_uid, 0);
+ Pid = kp->ki_pid;
+ Comm = kp->ki_comm;
- if (p->p_fd == NULL)
+ if (kp->ki_fd == NULL)
return;
- if (!KVM_READ(p->p_fd, &filed0, sizeof (filed0))) {
+ if (!KVM_READ(kp->ki_fd, &filed0, sizeof (filed0))) {
dprintf(stderr, "can't read filedesc at %p for pid %d\n",
- (void *)p->p_fd, Pid);
+ (void *)kp->ki_fd, Pid);
return;
}
/*
@@ -324,13 +322,13 @@ dofiles(kp)
/*
* ktrace vnode, if one
*/
- if (p->p_tracep)
- vtrans(p->p_tracep, TRACE, FREAD|FWRITE);
+ if (kp->ki_tracep)
+ vtrans(kp->ki_tracep, TRACE, FREAD|FWRITE);
/*
* text vnode, if one
*/
- if (p->p_textvp)
- vtrans(p->p_textvp, TEXT, FREAD);
+ if (kp->ki_textvp)
+ vtrans(kp->ki_textvp, TEXT, FREAD);
/*
* open files
*/
@@ -379,24 +377,23 @@ void
dommap(kp)
struct kinfo_proc *kp;
{
- struct proc *p = &kp->kp_proc;
- struct vmspace vmspace;
vm_map_t map;
+ struct vmspace vmspace;
struct vm_map_entry entry;
vm_map_entry_t entryp;
struct vm_object object;
vm_object_t objp;
int prot, fflags;
- if (!KVM_READ(p->p_vmspace, &vmspace, sizeof(vmspace))) {
- dprintf(stderr, "can't read vmspace at %p for pid %d\n",
- (void *)p->p_vmspace, Pid);
+ if (!KVM_READ(kp->ki_vmspace, &vmspace, sizeof(vmspace))) {
+ dprintf(stderr,
+ "can't read vmspace at %p for pid %d\n",
+ (void *)kp->ki_vmspace, Pid);
return;
}
-
map = &vmspace.vm_map;
- for (entryp = map->header.next; entryp != &p->p_vmspace->vm_map.header;
+ for (entryp = map->header.next; entryp != &vmspace.vm_map.header;
entryp = entry.next) {
if (!KVM_READ(entryp, &entry, sizeof(entry))) {
dprintf(stderr,
diff --git a/usr.bin/gcore/aoutcore.c b/usr.bin/gcore/aoutcore.c
index 6ad9568..0e443b8 100644
--- a/usr.bin/gcore/aoutcore.c
+++ b/usr.bin/gcore/aoutcore.c
@@ -80,15 +80,13 @@ static const char rcsid[] =
#include "extern.h"
static void core __P((int, int, struct kinfo_proc *));
-static void datadump __P((int, int, struct proc *, u_long, int));
+static void datadump __P((int, int, struct kinfo_proc *, u_long, int));
static void killed __P((int));
static void restart_target __P((void));
static void usage __P((void)) __dead2;
-static void userdump __P((int, struct proc *, u_long, int));
+static void userdump __P((int, struct kinfo_proc *, u_long, int));
kvm_t *kd;
-/* XXX undocumented routine, should be in kvm.h? */
-ssize_t kvm_uread __P((kvm_t *, const struct proc *, u_long, char *, size_t));
static int data_offset;
static pid_t pid;
@@ -98,7 +96,6 @@ main(argc, argv)
int argc;
char *argv[];
{
- register struct proc *p;
struct kinfo_proc *ki = NULL;
struct exec exec;
int ch, cnt, efd, fd, sflag, uid;
@@ -164,23 +161,22 @@ main(argc, argv)
if (ki == NULL || cnt != 1)
errx(1, "%d: not found", pid);
- p = &ki->kp_proc;
- if (ki->kp_eproc.e_pcred.p_ruid != uid && uid != 0)
+ if (ki->ki_ruid != uid && uid != 0)
errx(1, "%d: not owner", pid);
- if (p->p_stat == SZOMB)
+ if (ki->ki_stat == SZOMB)
errx(1, "%d: zombie", pid);
- if (p->p_flag & P_WEXIT)
+ if (ki->ki_flag & P_WEXIT)
errx(1, "%d: process exiting", pid);
- if (p->p_flag & P_SYSTEM) /* Swapper or pagedaemon. */
+ if (ki->ki_flag & P_SYSTEM) /* Swapper or pagedaemon. */
errx(1, "%d: system process", pid);
- if (exec.a_text != ptoa(ki->kp_eproc.e_vm.vm_tsize))
+ if (exec.a_text != ptoa(ki->ki_tsize))
errx(1, "The executable %s does not belong to"
" process %d!\n"
"Text segment size (in bytes): executable %ld,"
" process %d", binfile, pid, exec.a_text,
- ptoa(ki->kp_eproc.e_vm.vm_tsize));
+ ptoa(ki->ki_tsize));
data_offset = N_DATOFF(exec);
} else if (IS_ELF(*(Elf_Ehdr *)&exec)) {
is_aout = 0;
@@ -228,14 +224,13 @@ core(efd, fd, ki)
struct user user;
char ubytes[ctob(UPAGES)];
} uarea;
- struct proc *p = &ki->kp_proc;
- int tsize = ki->kp_eproc.e_vm.vm_tsize;
- int dsize = ki->kp_eproc.e_vm.vm_dsize;
- int ssize = ki->kp_eproc.e_vm.vm_ssize;
+ int tsize = ki->ki_tsize;
+ int dsize = ki->ki_dsize;
+ int ssize = ki->ki_ssize;
int cnt;
/* Read in user struct */
- cnt = kvm_read(kd, (u_long)p->p_addr, &uarea, sizeof(uarea));
+ cnt = kvm_read(kd, (u_long)ki->ki_addr, &uarea, sizeof(uarea));
if (cnt != sizeof(uarea))
errx(1, "read user structure: %s",
cnt > 0 ? strerror(EIO) : strerror(errno));
@@ -253,20 +248,20 @@ core(efd, fd, ki)
cnt > 0 ? strerror(EIO) : strerror(errno));
/* Dump data segment */
- datadump(efd, fd, p, USRTEXT + ctob(tsize), dsize);
+ datadump(efd, fd, ki, USRTEXT + ctob(tsize), dsize);
/* Dump stack segment */
- userdump(fd, p, USRSTACK - ctob(ssize), ssize);
+ userdump(fd, ki, USRSTACK - ctob(ssize), ssize);
/* Dump machine dependent portions of the core. */
md_core(kd, fd, ki);
}
void
-datadump(efd, fd, p, addr, npage)
+datadump(efd, fd, kp, addr, npage)
register int efd;
register int fd;
- struct proc *p;
+ struct kinfo_proc *kp;
register u_long addr;
register int npage;
{
@@ -275,7 +270,7 @@ datadump(efd, fd, p, addr, npage)
delta = data_offset - addr;
while (--npage >= 0) {
- cc = kvm_uread(kd, p, addr, buffer, PAGE_SIZE);
+ cc = kvm_uread(kd, kp, addr, buffer, PAGE_SIZE);
if (cc != PAGE_SIZE) {
/* Try to read the page from the executable. */
if (lseek(efd, (off_t)addr + delta, SEEK_SET) == -1)
@@ -312,9 +307,9 @@ restart_target()
}
void
-userdump(fd, p, addr, npage)
+userdump(fd, kp, addr, npage)
register int fd;
- struct proc *p;
+ struct kinfo_proc *kp;
register u_long addr;
register int npage;
{
@@ -322,7 +317,7 @@ userdump(fd, p, addr, npage)
char buffer[PAGE_SIZE];
while (--npage >= 0) {
- cc = kvm_uread(kd, p, addr, buffer, PAGE_SIZE);
+ cc = kvm_uread(kd, kp, addr, buffer, PAGE_SIZE);
if (cc != PAGE_SIZE)
/* Could be an untouched fill-with-zero page. */
bzero(buffer, PAGE_SIZE);
diff --git a/usr.bin/gcore/gcore.c b/usr.bin/gcore/gcore.c
index 6ad9568..0e443b8 100644
--- a/usr.bin/gcore/gcore.c
+++ b/usr.bin/gcore/gcore.c
@@ -80,15 +80,13 @@ static const char rcsid[] =
#include "extern.h"
static void core __P((int, int, struct kinfo_proc *));
-static void datadump __P((int, int, struct proc *, u_long, int));
+static void datadump __P((int, int, struct kinfo_proc *, u_long, int));
static void killed __P((int));
static void restart_target __P((void));
static void usage __P((void)) __dead2;
-static void userdump __P((int, struct proc *, u_long, int));
+static void userdump __P((int, struct kinfo_proc *, u_long, int));
kvm_t *kd;
-/* XXX undocumented routine, should be in kvm.h? */
-ssize_t kvm_uread __P((kvm_t *, const struct proc *, u_long, char *, size_t));
static int data_offset;
static pid_t pid;
@@ -98,7 +96,6 @@ main(argc, argv)
int argc;
char *argv[];
{
- register struct proc *p;
struct kinfo_proc *ki = NULL;
struct exec exec;
int ch, cnt, efd, fd, sflag, uid;
@@ -164,23 +161,22 @@ main(argc, argv)
if (ki == NULL || cnt != 1)
errx(1, "%d: not found", pid);
- p = &ki->kp_proc;
- if (ki->kp_eproc.e_pcred.p_ruid != uid && uid != 0)
+ if (ki->ki_ruid != uid && uid != 0)
errx(1, "%d: not owner", pid);
- if (p->p_stat == SZOMB)
+ if (ki->ki_stat == SZOMB)
errx(1, "%d: zombie", pid);
- if (p->p_flag & P_WEXIT)
+ if (ki->ki_flag & P_WEXIT)
errx(1, "%d: process exiting", pid);
- if (p->p_flag & P_SYSTEM) /* Swapper or pagedaemon. */
+ if (ki->ki_flag & P_SYSTEM) /* Swapper or pagedaemon. */
errx(1, "%d: system process", pid);
- if (exec.a_text != ptoa(ki->kp_eproc.e_vm.vm_tsize))
+ if (exec.a_text != ptoa(ki->ki_tsize))
errx(1, "The executable %s does not belong to"
" process %d!\n"
"Text segment size (in bytes): executable %ld,"
" process %d", binfile, pid, exec.a_text,
- ptoa(ki->kp_eproc.e_vm.vm_tsize));
+ ptoa(ki->ki_tsize));
data_offset = N_DATOFF(exec);
} else if (IS_ELF(*(Elf_Ehdr *)&exec)) {
is_aout = 0;
@@ -228,14 +224,13 @@ core(efd, fd, ki)
struct user user;
char ubytes[ctob(UPAGES)];
} uarea;
- struct proc *p = &ki->kp_proc;
- int tsize = ki->kp_eproc.e_vm.vm_tsize;
- int dsize = ki->kp_eproc.e_vm.vm_dsize;
- int ssize = ki->kp_eproc.e_vm.vm_ssize;
+ int tsize = ki->ki_tsize;
+ int dsize = ki->ki_dsize;
+ int ssize = ki->ki_ssize;
int cnt;
/* Read in user struct */
- cnt = kvm_read(kd, (u_long)p->p_addr, &uarea, sizeof(uarea));
+ cnt = kvm_read(kd, (u_long)ki->ki_addr, &uarea, sizeof(uarea));
if (cnt != sizeof(uarea))
errx(1, "read user structure: %s",
cnt > 0 ? strerror(EIO) : strerror(errno));
@@ -253,20 +248,20 @@ core(efd, fd, ki)
cnt > 0 ? strerror(EIO) : strerror(errno));
/* Dump data segment */
- datadump(efd, fd, p, USRTEXT + ctob(tsize), dsize);
+ datadump(efd, fd, ki, USRTEXT + ctob(tsize), dsize);
/* Dump stack segment */
- userdump(fd, p, USRSTACK - ctob(ssize), ssize);
+ userdump(fd, ki, USRSTACK - ctob(ssize), ssize);
/* Dump machine dependent portions of the core. */
md_core(kd, fd, ki);
}
void
-datadump(efd, fd, p, addr, npage)
+datadump(efd, fd, kp, addr, npage)
register int efd;
register int fd;
- struct proc *p;
+ struct kinfo_proc *kp;
register u_long addr;
register int npage;
{
@@ -275,7 +270,7 @@ datadump(efd, fd, p, addr, npage)
delta = data_offset - addr;
while (--npage >= 0) {
- cc = kvm_uread(kd, p, addr, buffer, PAGE_SIZE);
+ cc = kvm_uread(kd, kp, addr, buffer, PAGE_SIZE);
if (cc != PAGE_SIZE) {
/* Try to read the page from the executable. */
if (lseek(efd, (off_t)addr + delta, SEEK_SET) == -1)
@@ -312,9 +307,9 @@ restart_target()
}
void
-userdump(fd, p, addr, npage)
+userdump(fd, kp, addr, npage)
register int fd;
- struct proc *p;
+ struct kinfo_proc *kp;
register u_long addr;
register int npage;
{
@@ -322,7 +317,7 @@ userdump(fd, p, addr, npage)
char buffer[PAGE_SIZE];
while (--npage >= 0) {
- cc = kvm_uread(kd, p, addr, buffer, PAGE_SIZE);
+ cc = kvm_uread(kd, kp, addr, buffer, PAGE_SIZE);
if (cc != PAGE_SIZE)
/* Could be an untouched fill-with-zero page. */
bzero(buffer, PAGE_SIZE);
diff --git a/usr.bin/systat/pigs.c b/usr.bin/systat/pigs.c
index 3443ede..1086920 100644
--- a/usr.bin/systat/pigs.c
+++ b/usr.bin/systat/pigs.c
@@ -44,7 +44,6 @@ static char sccsid[] = "@(#)pigs.c 8.2 (Berkeley) 9/23/93";
#include <sys/param.h>
#include <sys/dkstat.h>
#include <sys/time.h>
-#include <sys/proc.h>
#include <sys/user.h>
#include <sys/sysctl.h>
@@ -91,7 +90,6 @@ void
showpigs()
{
register int i, j, y, k;
- struct eproc *ep;
float total;
int factor;
char *uname, *pname, pidname[30];
@@ -120,9 +118,9 @@ showpigs()
pname = "<idle>";
}
else {
- ep = &pt[k].pt_kp->kp_eproc;
- uname = (char *)user_from_uid(ep->e_ucred.cr_uid, 0);
- pname = pt[k].pt_kp->kp_proc.p_comm;
+ uname = (char *)
+ user_from_uid(pt[k].pt_kp->ki_uid, 0);
+ pname = pt[k].pt_kp->ki_comm;
}
wmove(wnd, y, 0);
wclrtoeol(wnd);
@@ -174,7 +172,6 @@ fetchpigs()
{
register int i;
register float time;
- register struct proc *pp;
register float *pctp;
struct kinfo_proc *kpp;
long ctime[CPUSTATES];
@@ -203,13 +200,12 @@ fetchpigs()
*/
for (i = 0; i < nproc; i++) {
pt[i].pt_kp = &kpp[i];
- pp = &kpp[i].kp_proc;
pctp = &pt[i].pt_pctcpu;
- time = pp->p_swtime;
- if (time == 0 || (pp->p_flag & P_INMEM) == 0)
+ time = kpp[i].ki_swtime;
+ if (time == 0 || (kpp[i].ki_flag & P_INMEM) == 0)
*pctp = 0;
else
- *pctp = ((double) pp->p_pctcpu /
+ *pctp = ((double) kpp[i].ki_pctcpu /
fscale) / (1.0 - exp(time * lccpu));
}
/*
diff --git a/usr.bin/top/machine.c b/usr.bin/top/machine.c
index 7988183..3e4073d 100644
--- a/usr.bin/top/machine.c
+++ b/usr.bin/top/machine.c
@@ -75,16 +75,12 @@ struct handle
/* declarations for load_avg */
#include "loadavg.h"
-#define PP(pp, field) ((pp)->kp_proc . field)
-#define EP(pp, field) ((pp)->kp_eproc . field)
-#define VP(pp, field) ((pp)->kp_eproc.e_vm . field)
-
/* define what weighted cpu is. */
-#define weighted_cpu(pct, pp) (PP((pp), p_swtime) == 0 ? 0.0 : \
- ((pct) / (1.0 - exp(PP((pp), p_swtime) * logcpu))))
+#define weighted_cpu(pct, pp) ((pp)->ki_swtime == 0 ? 0.0 : \
+ ((pct) / (1.0 - exp((pp)->ki_swtime * logcpu))))
/* what we consider to be process size: */
-#define PROCSIZE(pp) (VP((pp), vm_map.size) / 1024)
+#define PROCSIZE(pp) ((pp)->ki_size / 1024)
/* definitions for indices in the nlist array */
@@ -501,16 +497,16 @@ int (*compare)();
* status field. Processes with P_SYSTEM set are system
* processes---these get ignored unless show_sysprocs is set.
*/
- if (PP(pp, p_stat) != 0 &&
- (show_self != PP(pp, p_pid)) &&
- (show_system || ((PP(pp, p_flag) & P_SYSTEM) == 0)))
+ if (pp->ki_stat != 0 &&
+ (show_self != pp->ki_pid) &&
+ (show_system || ((pp->ki_flag & P_SYSTEM) == 0)))
{
total_procs++;
- process_states[(unsigned char) PP(pp, p_stat)]++;
- if ((PP(pp, p_stat) != SZOMB) &&
- (show_idle || (PP(pp, p_pctcpu) != 0) ||
- (PP(pp, p_stat) == SRUN)) &&
- (!show_uid || EP(pp, e_pcred.p_ruid) == (uid_t)sel->uid))
+ process_states[(unsigned char) pp->ki_stat]++;
+ if ((pp->ki_stat != SZOMB) &&
+ (show_idle || (pp->ki_pctcpu != 0) ||
+ (pp->ki_stat == SRUN)) &&
+ (!show_uid || pp->ki_ruid == (uid_t)sel->uid))
{
*prefp++ = pp;
active_procs++;
@@ -555,12 +551,12 @@ char *(*get_userid)();
hp->remaining--;
/* get the process's command name */
- if ((PP(pp, p_flag) & P_INMEM) == 0) {
+ if ((pp->ki_flag & P_INMEM) == 0) {
/*
* Print swapped processes as <pname>
*/
- char *comm = PP(pp, p_comm);
-#define COMSIZ sizeof(PP(pp, p_comm))
+ char *comm = pp->ki_comm;
+#define COMSIZ sizeof(pp->ki_comm)
char buf[COMSIZ];
(void) strncpy(buf, comm, COMSIZ);
comm[0] = '<';
@@ -575,28 +571,28 @@ char *(*get_userid)();
* time includes the interrupt time although that is not wanted here.
* ps(1) is similarly sloppy.
*/
- cputime = (PP(pp, p_runtime) + 500000) / 1000000;
+ cputime = (pp->ki_runtime + 500000) / 1000000;
/* calculate the base for cpu percentages */
- pct = pctdouble(PP(pp, p_pctcpu));
+ pct = pctdouble(pp->ki_pctcpu);
/* generate "STATE" field */
- switch (state = PP(pp, p_stat)) {
+ switch (state = pp->ki_stat) {
case SRUN:
- if (smpmode && PP(pp, p_oncpu) != 0xff)
- sprintf(status, "CPU%d", PP(pp, p_oncpu));
+ if (smpmode && pp->ki_oncpu != 0xff)
+ sprintf(status, "CPU%d", pp->ki_oncpu);
else
strcpy(status, "RUN");
break;
case SMTX:
- if (PP(pp, p_mtxname) != NULL) {
- sprintf(status, "*%.6s", EP(pp, e_mtxname));
+ if (pp->ki_kiflag & KI_MTXBLOCK) {
+ sprintf(status, "*%.6s", pp->ki_mtxname);
break;
}
/* fall through */
case SSLEEP:
- if (PP(pp, p_wmesg) != NULL) {
- sprintf(status, "%.6s", EP(pp, e_wmesg));
+ if (pp->ki_wmesg != NULL) {
+ sprintf(status, "%.6s", pp->ki_wmesg);
break;
}
/* fall through */
@@ -613,32 +609,32 @@ char *(*get_userid)();
/* format this entry */
sprintf(fmt,
smpmode ? smp_Proc_format : up_Proc_format,
- PP(pp, p_pid),
+ pp->ki_pid,
namelength, namelength,
- (*get_userid)(EP(pp, e_pcred.p_ruid)),
- PP(pp, p_priority) - PZERO,
+ (*get_userid)(pp->ki_ruid),
+ pp->ki_priority - PZERO,
/*
* normal time -> nice value -20 - +20
* real time 0 - 31 -> nice value -52 - -21
* idle time 0 - 31 -> nice value +21 - +52
*/
- (PP(pp, p_rtprio.type) == RTP_PRIO_NORMAL ?
- PP(pp, p_nice) - NZERO :
- (RTP_PRIO_IS_REALTIME(PP(pp, p_rtprio.type)) ?
- (PRIO_MIN - 1 - RTP_PRIO_MAX + PP(pp, p_rtprio.prio)) :
- (PRIO_MAX + 1 + PP(pp, p_rtprio.prio)))),
+ (pp->ki_rtprio.type == RTP_PRIO_NORMAL ?
+ pp->ki_nice - NZERO :
+ (RTP_PRIO_IS_REALTIME(pp->ki_rtprio.type) ?
+ (PRIO_MIN - 1 - RTP_PRIO_MAX + pp->ki_rtprio.prio) :
+ (PRIO_MAX + 1 + pp->ki_rtprio.prio))),
format_k2(PROCSIZE(pp)),
- format_k2(pagetok(VP(pp, vm_rssize))),
+ format_k2(pagetok(pp->ki_rssize)),
status,
- smpmode ? PP(pp, p_lastcpu) : 0,
+ smpmode ? pp->ki_lastcpu : 0,
format_time(cputime),
100.0 * weighted_cpu(pct, pp),
100.0 * pct,
screen_width > cmdlengthdelta ?
screen_width - cmdlengthdelta :
0,
- printable(PP(pp, p_comm)));
+ printable(pp->ki_comm));
/* return the result */
return(fmt);
@@ -741,22 +737,22 @@ static unsigned char sorted_state[] =
#define ORDERKEY_PCTCPU \
- if (lresult = (long) PP(p2, p_pctcpu) - (long) PP(p1, p_pctcpu), \
+ if (lresult = (long) p2->ki_pctcpu - (long) p1->ki_pctcpu, \
(result = lresult > 0 ? 1 : lresult < 0 ? -1 : 0) == 0)
#define ORDERKEY_CPTICKS \
- if ((result = PP(p2, p_runtime) > PP(p1, p_runtime) ? 1 : \
- PP(p2, p_runtime) < PP(p1, p_runtime) ? -1 : 0) == 0)
+ if ((result = p2->ki_runtime > p1->ki_runtime ? 1 : \
+ p2->ki_runtime < p1->ki_runtime ? -1 : 0) == 0)
#define ORDERKEY_STATE \
- if ((result = sorted_state[(unsigned char) PP(p2, p_stat)] - \
- sorted_state[(unsigned char) PP(p1, p_stat)]) == 0)
+ if ((result = sorted_state[(unsigned char) p2->ki_stat] - \
+ sorted_state[(unsigned char) p1->ki_stat]) == 0)
#define ORDERKEY_PRIO \
- if ((result = PP(p2, p_priority) - PP(p1, p_priority)) == 0)
+ if ((result = p2->ki_priority - p1->ki_priority) == 0)
#define ORDERKEY_RSSIZE \
- if ((result = VP(p2, vm_rssize) - VP(p1, vm_rssize)) == 0)
+ if ((result = p2->ki_rssize - p1->ki_rssize) == 0)
#define ORDERKEY_MEM \
if ( (result = PROCSIZE(p2) - PROCSIZE(p1)) == 0 )
@@ -948,9 +944,9 @@ int pid;
while (--cnt >= 0)
{
pp = *prefp++;
- if (PP(pp, p_pid) == (pid_t)pid)
+ if (pp->ki_pid == (pid_t)pid)
{
- return((int)EP(pp, e_pcred.p_ruid));
+ return((int)pp->ki_ruid);
}
}
return(-1);
diff --git a/usr.bin/w/extern.h b/usr.bin/w/extern.h
index 7cb4ed0..7037f9a 100644
--- a/usr.bin/w/extern.h
+++ b/usr.bin/w/extern.h
@@ -31,9 +31,11 @@
* SUCH DAMAGE.
*
* @(#)extern.h 8.1 (Berkeley) 6/6/93
+ * $FreeBSD$
*/
-struct proc;
+
+struct kinfo_proc;
void pr_attime __P((time_t *, time_t *));
int pr_idle __P((time_t));
-int proc_compare __P((struct proc *, struct proc *));
+int proc_compare __P((struct kinfo_proc *, struct kinfo_proc *));
diff --git a/usr.bin/w/proc_compare.c b/usr.bin/w/proc_compare.c
index e95359c..a94a6b2 100644
--- a/usr.bin/w/proc_compare.c
+++ b/usr.bin/w/proc_compare.c
@@ -32,12 +32,16 @@
*/
#ifndef lint
+#if 0
static char sccsid[] = "@(#)proc_compare.c 8.2 (Berkeley) 9/23/93";
+#endif
+static const char rcsid[] =
+ "$FreeBSD$";
#endif /* not lint */
#include <sys/param.h>
#include <sys/time.h>
-#include <sys/proc.h>
+#include <sys/user.h>
#include "extern.h"
@@ -60,7 +64,7 @@ static char sccsid[] = "@(#)proc_compare.c 8.2 (Berkeley) 9/23/93";
* TODO - consider whether pctcpu should be used.
*/
-#define ISRUN(p) (((p)->p_stat == SRUN) || ((p)->p_stat == SIDL))
+#define ISRUN(p) (((p)->ki_stat == SRUN) || ((p)->ki_stat == SIDL))
#define TESTAB(a, b) ((a)<<1 | (b))
#define ONLYA 2
#define ONLYB 1
@@ -68,7 +72,7 @@ static char sccsid[] = "@(#)proc_compare.c 8.2 (Berkeley) 9/23/93";
int
proc_compare(p1, p2)
- register struct proc *p1, *p2;
+ struct kinfo_proc *p1, *p2;
{
if (p1 == NULL)
@@ -85,36 +89,36 @@ proc_compare(p1, p2)
/*
* tie - favor one with highest recent cpu utilization
*/
- if (p2->p_estcpu > p1->p_estcpu)
+ if (p2->ki_estcpu > p1->ki_estcpu)
return (1);
- if (p1->p_estcpu > p2->p_estcpu)
+ if (p1->ki_estcpu > p2->ki_estcpu)
return (0);
- return (p2->p_pid > p1->p_pid); /* tie - return highest pid */
+ return (p2->ki_pid > p1->ki_pid); /* tie - return highest pid */
}
/*
* weed out zombies
*/
- switch (TESTAB(p1->p_stat == SZOMB, p2->p_stat == SZOMB)) {
+ switch (TESTAB(p1->ki_stat == SZOMB, p2->ki_stat == SZOMB)) {
case ONLYA:
return (1);
case ONLYB:
return (0);
case BOTH:
- return (p2->p_pid > p1->p_pid); /* tie - return highest pid */
+ return (p2->ki_pid > p1->ki_pid); /* tie - return highest pid */
}
/*
* pick the one with the smallest sleep time
*/
- if (p2->p_slptime > p1->p_slptime)
+ if (p2->ki_slptime > p1->ki_slptime)
return (0);
- if (p1->p_slptime > p2->p_slptime)
+ if (p1->ki_slptime > p2->ki_slptime)
return (1);
/*
* favor one sleeping in a non-interruptible sleep
*/
- if (p1->p_flag & P_SINTR && (p2->p_flag & P_SINTR) == 0)
+ if (p1->ki_flag & P_SINTR && (p2->ki_flag & P_SINTR) == 0)
return (1);
- if (p2->p_flag & P_SINTR && (p1->p_flag & P_SINTR) == 0)
+ if (p2->ki_flag & P_SINTR && (p1->ki_flag & P_SINTR) == 0)
return (0);
- return (p2->p_pid > p1->p_pid); /* tie - return highest pid */
+ return (p2->ki_pid > p1->ki_pid); /* tie - return highest pid */
}
diff --git a/usr.bin/w/w.c b/usr.bin/w/w.c
index d91aa8c..0ead030 100644
--- a/usr.bin/w/w.c
+++ b/usr.bin/w/w.c
@@ -114,7 +114,7 @@ struct entry {
struct kinfo_proc *dkp; /* debug option proc list */
} *ep, *ehead = NULL, **nextp = &ehead;
-#define debugproc(p) *((struct kinfo_proc **)&(p)->kp_eproc.e_spare[0])
+#define debugproc(p) *((struct kinfo_proc **)&(p)->ki_spare[0])
static void pr_header __P((time_t *, int));
static struct stat *ttystat __P((char *, int));
@@ -273,27 +273,23 @@ main(argc, argv)
if ((kp = kvm_getprocs(kd, KERN_PROC_ALL, 0, &nentries)) == NULL)
err(1, "%s", kvm_geterr(kd));
for (i = 0; i < nentries; i++, kp++) {
- struct proc *pr = &kp->kp_proc;
- struct eproc *e;
-
- if (pr->p_stat == SIDL || pr->p_stat == SZOMB)
+ if (kp->ki_stat == SIDL || kp->ki_stat == SZOMB)
continue;
- e = &kp->kp_eproc;
for (ep = ehead; ep != NULL; ep = ep->next) {
- if (ep->tdev == e->e_tdev) {
+ if (ep->tdev == kp->ki_tdev) {
/*
* proc is associated with this terminal
*/
- if (ep->kp == NULL && e->e_pgid == e->e_tpgid) {
+ if (ep->kp == NULL && kp->ki_pgid == kp->ki_tpgid) {
/*
* Proc is 'most interesting'
*/
- if (proc_compare(&ep->kp->kp_proc, pr))
+ if (proc_compare(ep->kp, kp))
ep->kp = kp;
}
/*
* Proc debug option info; add to debug
- * list using kinfo_proc kp_eproc.e_spare
+ * list using kinfo_proc ki_spare[0]
* as next pointer; ptr to ptr avoids the
* ptr = long assumption.
*/
@@ -318,7 +314,7 @@ main(argc, argv)
continue;
}
ep->args = fmt_argv(kvm_getargv(kd, ep->kp, argwidth),
- ep->kp->kp_proc.p_comm, MAXCOMLEN);
+ ep->kp->ki_comm, MAXCOMLEN);
if (ep->args == NULL)
err(1, NULL);
}
@@ -389,11 +385,11 @@ main(argc, argv)
char *ptr;
ptr = fmt_argv(kvm_getargv(kd, dkp, argwidth),
- dkp->kp_proc.p_comm, MAXCOMLEN);
+ dkp->ki_comm, MAXCOMLEN);
if (ptr == NULL)
ptr = "-";
(void)printf("\t\t%-9d %s\n",
- dkp->kp_proc.p_pid, ptr);
+ dkp->ki_pid, ptr);
}
}
(void)printf("%-*.*s %-*.*s %-*.*s ",
OpenPOWER on IntegriCloud