version 1.18, 2002/06/15 18:47:50 |
version 1.19, 2002/12/17 23:11:32 |
|
|
|
|
#include <sys/param.h> |
#include <sys/param.h> |
#include <sys/sysctl.h> |
#include <sys/sysctl.h> |
#define _KERNEL |
#define _KERNEL /* XXX */ |
#include <sys/ipc.h> |
#include <sys/ipc.h> |
#include <sys/sem.h> |
#include <sys/sem.h> |
#include <sys/shm.h> |
#include <sys/shm.h> |
|
|
char *buf; |
char *buf; |
int mib[3]; |
int mib[3]; |
size_t len; |
size_t len; |
int i /*, valid */; |
int i, valid; |
long valid; |
|
|
|
mib[0] = CTL_KERN; |
mib[0] = CTL_KERN; |
mib[1] = KERN_SYSVSHM; |
mib[1] = KERN_SYSVSHM; |
|
|
show_shminfo_hdr(); |
show_shminfo_hdr(); |
for (i = 0; i < shmsi->shminfo.shmmni; i++) { |
for (i = 0; i < shmsi->shminfo.shmmni; i++) { |
struct shmid_ds *shmptr = &shmsi->shmids[i]; |
struct shmid_ds *shmptr = &shmsi->shmids[i]; |
if (shmptr->shm_perm.mode & 0x0800) |
if (shmptr->shm_internal) |
show_shminfo(shmptr->shm_atime, |
show_shminfo(shmptr->shm_atime, |
shmptr->shm_dtime, |
shmptr->shm_dtime, |
shmptr->shm_ctime, |
shmptr->shm_ctime, |
|
|
show_seminfo_hdr(); |
show_seminfo_hdr(); |
for (i = 0; i < semsi->seminfo.semmni; i++) { |
for (i = 0; i < semsi->seminfo.semmni; i++) { |
struct semid_ds *semaptr = &semsi->semids[i]; |
struct semid_ds *semaptr = &semsi->semids[i]; |
if ((semaptr->sem_perm.mode & SEM_ALLOC) != 0) |
|
|
if (semaptr->sem_base != NULL) |
show_seminfo(semaptr->sem_otime, |
show_seminfo(semaptr->sem_otime, |
semaptr->sem_ctime, |
semaptr->sem_ctime, |
IXSEQ_TO_IPCID(i, semaptr->sem_perm), |
IXSEQ_TO_IPCID(i, semaptr->sem_perm), |
|
|
struct msginfo msginfo; |
struct msginfo msginfo; |
struct msqid_ds *msqids; |
struct msqid_ds *msqids; |
struct seminfo seminfo; |
struct seminfo seminfo; |
struct semid_ds *sema; |
struct semid_ds sem, **sema; |
struct shminfo shminfo; |
struct shminfo shminfo; |
struct shmid_ds *shmsegs; |
struct shmid_ds shmseg, **shmsegs; |
kvm_t *kd; |
|
char errbuf[_POSIX2_LINE_MAX]; |
char errbuf[_POSIX2_LINE_MAX]; |
|
u_long addr; |
|
kvm_t *kd; |
int i; |
int i; |
struct nlist symbols[] = { |
struct nlist symbols[] = { |
{"_sema"}, |
{"_sema"}, |
|
|
show_msgtotal(&msginfo); |
show_msgtotal(&msginfo); |
|
|
if (display & MSGINFO) { |
if (display & MSGINFO) { |
struct msqid_ds *xmsqids; |
|
|
|
if (kvm_read(kd, symbols[X_MSQIDS].n_value, |
if (kvm_read(kd, symbols[X_MSQIDS].n_value, |
&msqids, sizeof(msqids)) != sizeof(msqids)) |
&addr, sizeof(addr)) != sizeof(addr)) |
errx(1, "kvm_read (%s): %s", |
errx(1, "kvm_read (%s): %s", |
symbols[X_MSQIDS].n_name, kvm_geterr(kd)); |
symbols[X_MSQIDS].n_name, kvm_geterr(kd)); |
|
|
xmsqids = malloc(sizeof(struct msqid_ds) * |
msqids = malloc(sizeof(struct msqid_ds) * |
msginfo.msgmni); |
msginfo.msgmni); |
|
if (msqids == NULL) |
|
err(1, "malloc"); |
|
|
if (kvm_read(kd, (u_long)msqids, xmsqids, |
if (kvm_read(kd, addr, msqids, |
sizeof(struct msqid_ds) * msginfo.msgmni) != |
sizeof(struct msqid_ds) * msginfo.msgmni) != |
sizeof(struct msqid_ds) * msginfo.msgmni) |
sizeof(struct msqid_ds) * msginfo.msgmni) |
errx(1, "kvm_read (msqids): %s", |
errx(1, "kvm_read (msqids): %s", |
|
|
|
|
show_msginfo_hdr(); |
show_msginfo_hdr(); |
for (i = 0; i < msginfo.msgmni; i++) { |
for (i = 0; i < msginfo.msgmni; i++) { |
struct msqid_ds *msqptr = &xmsqids[i]; |
struct msqid_ds *msqptr = &msqids[i]; |
if (msqptr->msg_qbytes != 0) |
if (msqptr->msg_qbytes != 0) |
show_msginfo(msqptr->msg_stime, |
show_msginfo(msqptr->msg_stime, |
msqptr->msg_rtime, |
msqptr->msg_rtime, |
|
|
show_shmtotal(&shminfo); |
show_shmtotal(&shminfo); |
|
|
if (display & SHMINFO) { |
if (display & SHMINFO) { |
struct shmid_ds *xshmids; |
if (kvm_read(kd, symbols[X_SHMSEGS].n_value, &addr, |
|
sizeof(addr)) != sizeof(addr)) |
if (kvm_read(kd, symbols[X_SHMSEGS].n_value, &shmsegs, |
|
sizeof(shmsegs)) != sizeof(shmsegs)) |
|
errx(1, "kvm_read (%s): %s", |
errx(1, "kvm_read (%s): %s", |
symbols[X_SHMSEGS].n_name, kvm_geterr(kd)); |
symbols[X_SHMSEGS].n_name, kvm_geterr(kd)); |
|
|
xshmids = malloc(sizeof(struct shmid_ds) * |
shmsegs = malloc(sizeof(struct shmid_ds *) * |
shminfo.shmmni); |
shminfo.shmmni); |
|
if (shmsegs == NULL) |
|
err(1, "malloc"); |
|
|
if (kvm_read(kd, (u_long)shmsegs, xshmids, |
if (kvm_read(kd, addr, shmsegs, |
sizeof(struct shmid_ds) * shminfo.shmmni) != |
sizeof(struct shmid_ds *) * shminfo.shmmni) != |
sizeof(struct shmid_ds) * shminfo.shmmni) |
sizeof(struct shmid_ds *) * shminfo.shmmni) |
errx(1, "kvm_read (shmsegs): %s", |
errx(1, "kvm_read (shmsegs): %s", |
kvm_geterr(kd)); |
kvm_geterr(kd)); |
|
|
show_shminfo_hdr(); |
show_shminfo_hdr(); |
for (i = 0; i < shminfo.shmmni; i++) { |
for (i = 0; i < shminfo.shmmni; i++) { |
struct shmid_ds *shmptr = &xshmids[i]; |
if (shmsegs[i] == NULL) |
if (shmptr->shm_perm.mode & 0x0800) |
continue; |
show_shminfo(shmptr->shm_atime, |
|
shmptr->shm_dtime, |
if (kvm_read(kd, (u_long)shmsegs[i], &shmseg, |
shmptr->shm_ctime, |
sizeof(shmseg)) != sizeof(shmseg)) |
IXSEQ_TO_IPCID(i, shmptr->shm_perm), |
errx(1, "kvm_read (shmseg): %s", |
shmptr->shm_perm.key, |
kvm_geterr(kd)); |
shmptr->shm_perm.mode, |
show_shminfo(shmseg.shm_atime, |
shmptr->shm_perm.uid, |
shmseg.shm_dtime, |
shmptr->shm_perm.gid, |
shmseg.shm_ctime, |
shmptr->shm_perm.cuid, |
IXSEQ_TO_IPCID(i, shmseg.shm_perm), |
shmptr->shm_perm.cgid, |
shmseg.shm_perm.key, |
shmptr->shm_nattch, |
shmseg.shm_perm.mode, |
shmptr->shm_segsz, |
shmseg.shm_perm.uid, |
shmptr->shm_cpid, |
shmseg.shm_perm.gid, |
shmptr->shm_lpid); |
shmseg.shm_perm.cuid, |
|
shmseg.shm_perm.cgid, |
|
shmseg.shm_nattch, |
|
shmseg.shm_segsz, |
|
shmseg.shm_cpid, |
|
shmseg.shm_lpid); |
} |
} |
printf("\n"); |
printf("\n"); |
} |
} |
|
|
if ((display & (SEMINFO | SEMTOTAL)) && |
if ((display & (SEMINFO | SEMTOTAL)) && |
(kvm_read(kd, symbols[X_SEMINFO].n_value, &seminfo, |
(kvm_read(kd, symbols[X_SEMINFO].n_value, &seminfo, |
sizeof(seminfo)) == sizeof(seminfo))) { |
sizeof(seminfo)) == sizeof(seminfo))) { |
struct semid_ds *xsema; |
|
|
|
if (display & SEMTOTAL) |
if (display & SEMTOTAL) |
show_semtotal(&seminfo); |
show_semtotal(&seminfo); |
|
|
if (display & SEMINFO) { |
if (display & SEMINFO) { |
if (kvm_read(kd, symbols[X_SEMA].n_value, &sema, |
if (kvm_read(kd, symbols[X_SEMA].n_value, &addr, |
sizeof(sema)) != sizeof(sema)) |
sizeof(addr)) != sizeof(addr)) |
errx(1, "kvm_read (%s): %s", |
errx(1, "kvm_read (%s): %s", |
symbols[X_SEMA].n_name, kvm_geterr(kd)); |
symbols[X_SEMA].n_name, kvm_geterr(kd)); |
|
|
xsema = malloc(sizeof(struct semid_ds) * |
sema = malloc(sizeof(struct semid_ds *) * |
seminfo.semmni); |
seminfo.semmni); |
|
if (sema == NULL) |
|
err(1, "malloc"); |
|
|
if (kvm_read(kd, (u_long)sema, xsema, |
if (kvm_read(kd, addr, sema, |
sizeof(struct semid_ds) * seminfo.semmni) != |
sizeof(struct semid_ds *) * seminfo.semmni) != |
sizeof(struct semid_ds) * seminfo.semmni) |
sizeof(struct semid_ds *) * seminfo.semmni) |
errx(1, "kvm_read (sema): %s", |
errx(1, "kvm_read (sema): %s", |
kvm_geterr(kd)); |
kvm_geterr(kd)); |
|
|
show_seminfo_hdr(); |
show_seminfo_hdr(); |
for (i = 0; i < seminfo.semmni; i++) { |
for (i = 0; i < seminfo.semmni; i++) { |
struct semid_ds *semaptr = &xsema[i]; |
if (sema[i] == NULL) |
if ((semaptr->sem_perm.mode & SEM_ALLOC) != 0) |
continue; |
show_seminfo(semaptr->sem_otime, |
|
semaptr->sem_ctime, |
|
IXSEQ_TO_IPCID(i, semaptr->sem_perm), |
|
semaptr->sem_perm.key, |
|
semaptr->sem_perm.mode, |
|
semaptr->sem_perm.uid, |
|
semaptr->sem_perm.gid, |
|
semaptr->sem_perm.cuid, |
|
semaptr->sem_perm.cgid, |
|
semaptr->sem_nsems); |
|
} |
|
|
|
|
if (kvm_read(kd, (u_long)sema[i], &sem, |
|
sizeof(sem)) != sizeof(sem)) |
|
errx(1, "kvm_read (sem): %s", |
|
kvm_geterr(kd)); |
|
show_seminfo(sem.sem_otime, |
|
sem.sem_ctime, |
|
IXSEQ_TO_IPCID(i, sem.sem_perm), |
|
sem.sem_perm.key, |
|
sem.sem_perm.mode, |
|
sem.sem_perm.uid, |
|
sem.sem_perm.gid, |
|
sem.sem_perm.cuid, |
|
sem.sem_perm.cgid, |
|
sem.sem_nsems); |
|
} |
printf("\n"); |
printf("\n"); |
} |
} |
} else |
} else |