* Copyright (c) 1993 The Regents of the University of California.
* Copyright (c) 1993 Jan-Simon Pendry
* This code is derived from software contributed to Berkeley by
* %sccs.include.redist.c%
* @(#)procfs_status.c 8.1 (Berkeley) %G%
* $Id: procfs_status.c,v 3.1 1993/12/15 09:40:17 jsp Exp $
#include <sys/resource.h>
#include <sys/resourcevar.h>
#include <miscfs/procfs/procfs.h>
procfs_dostatus(curp
, p
, pfs
, uio
)
int pid
, ppid
, pgid
, sid
;
char psbuf
[256]; /* XXX - conservative */
if (uio
->uio_rw
!= UIO_READ
)
ppid
= p
->p_pptr
? p
->p_pptr
->p_pid
: 0,
sess
= p
->p_pgrp
->pg_session
;
sid
= sess
->s_leader
? sess
->s_leader
->p_pid
: 0;
/* comm pid ppid pgid sid maj,min ctty,sldr start ut st wmsg uid groups ... */
bcopy(p
->p_comm
, ps
, MAXCOMLEN
);
ps
+= sprintf(ps
, " %d %d %d %d ", pid
, ppid
, pgid
, sid
);
if ((p
->p_flag
&P_CONTROLT
) && (tp
= sess
->s_ttyp
))
ps
+= sprintf(ps
, "%d,%d ", major(tp
->t_dev
), minor(tp
->t_dev
));
ps
+= sprintf(ps
, "%d,%d ", -1, -1);
ps
+= sprintf(ps
, "%sctty", sep
);
ps
+= sprintf(ps
, "%ssldr", sep
);
ps
+= sprintf(ps
, "noflags");
ps
+= sprintf(ps
, " %d %d",
p
->p_stats
->p_start
.tv_sec
,
p
->p_stats
->p_start
.tv_usec
);
ps
+= sprintf(ps
, " -1 -1");
calcru(p
, &ut
, &st
, (void *) 0);
ps
+= sprintf(ps
, " %d %d %d %d",
(p
->p_wchan
&& p
->p_wmesg
) ? p
->p_wmesg
: "nochan");
ps
+= sprintf(ps
, " %d %d", cr
->cr_uid
, cr
->cr_gid
);
for (i
= 0; i
< cr
->cr_ngroups
; i
++)
ps
+= sprintf(ps
, " %d", cr
->cr_groups
[i
]);
ps
= psbuf
+ uio
->uio_offset
;
xlen
= min(xlen
, uio
->uio_resid
);
error
= uiomove(ps
, xlen
, uio
);