* procp - print out many statistics about a process
* Jeff Schriebman UC Berkeley June 1977
* Data is output from the proc table, u dot area,
* file table, and inode table.
#include "/usr/sys/param.h"
#include "/usr/sys/conf.h"
#include "/usr/sys/proc.h"
#include "/usr/sys/inode.h"
#include "/usr/sys/file.h"
#include "/usr/sys/tty.h"
#include "/usr/sys/user.h"
printf("PID = %d\n", pid
);
printf("cannot change to /dev\n");
setup(&nl
[1], "_swapdev");
if ((mem
= open(coref
, 0)) < 0) {
* print process table information
printf("stat nice sig uid gid pgrp ppid wchan clock\n");
printf("%4d %4d %5o %4d %4d %5d %5d %6o %5d\n",
p
->p_stat
, p
->p_nice
, p
->p_sig
, p
->p_uid
&0377, (p
->p_uid
>>8)&0377,
p
->p_pgrp
, p
->p_ppid
, p
->p_wchan
, p
->p_clktim
);
j
= p
->u_ttyd
.d_major
& 0377;
k
= p
->u_ttyd
.d_minor
& 0377;
jj
= n
->i_dev
.d_major
& 0377;
kk
= n
->i_dev
.d_minor
& 0377;
printf("ruid rgid direct inode tty dev cdir\n");
printf("%4d %4d %14s %6d %2d/%-2d %2d/%-2d %5d\n",
p
->u_ruid
&0377, p
->u_rgid
&0377, p
->u_dent
.u_name
, p
->u_dent
.u_ino
,
j
, k
, jj
, kk
, n
->i_number
);
printf(" files inodes\n");
printf("num type count count dev inum uid gid\n");
for (i
=0; i
< NOFILE
; i
++) {
read(mem
, file
, sizeof file
[0]);
if (file
[0].f_flag
& FREAD
)
if (file
[0].f_flag
& FWRITE
)
if (file
[0].f_flag
& FPIPE
)
printf("%3d %c%c%c %5d %4d %2d/%-2d %4d %4d %4d\n",
i
, t1
, t2
, t3
, file
[0].f_count
,
n
->i_count
, j
, k
, n
->i_number
, n
->i_uid
&0377, n
->i_gid
&0377);
for (i
=0; i
< NSIG
; i
++) {
if ((s
=p
->u_signal
[i
]) == 0)
printf("%3d %5d ignored\n", i
, s
);
printf("%3d %5d caught\n", i
, s
);
seek(mem
, nl
[0].value
, 0);
for (i
=0; i
<NPROC
; i
++) {
read(mem
, proc
, sizeof proc
);
read(mem
, inode
, sizeof inode
[0]);
register struct { int dir_ino
; char dir_n
[14]; } *p
;
seek(mem
, nl
[1].value
, 0);
read(mem
, &nl
[1].value
, 2);
printf("cannot open /dev\n");
printf("no swap device\n");
for(p
= dbuf
; p
< dbuf
+512; p
++) {
if(stat(p
->dir_n
, sbuf
) < 0)
if((sbuf
->iflags
& 060000) != 060000)
if(sbuf
->iaddr
[0] == nl
[1].value
)
swap
= open(p
->dir_n
, 0);
if (proc
[0].p_flag
&SLOAD
) {
if (read(mf
, &ua
[0], 512) != 512)