Annotation of src/sys/miscfs/procfs/procfs_status.c, Revision 1.16.2.1
1.16.2.1! nathanw 1: /* $NetBSD: procfs_status.c,v 1.16 2000/12/30 23:14:52 david Exp $ */
1.9 cgd 2:
1.1 cgd 3: /*
4: * Copyright (c) 1993 Jan-Simon Pendry
1.6 mycroft 5: * Copyright (c) 1993
6: * The Regents of the University of California. All rights reserved.
1.1 cgd 7: *
8: * This code is derived from software contributed to Berkeley by
9: * Jan-Simon Pendry.
10: *
11: * Redistribution and use in source and binary forms, with or without
12: * modification, are permitted provided that the following conditions
13: * are met:
14: * 1. Redistributions of source code must retain the above copyright
15: * notice, this list of conditions and the following disclaimer.
16: * 2. Redistributions in binary form must reproduce the above copyright
17: * notice, this list of conditions and the following disclaimer in the
18: * documentation and/or other materials provided with the distribution.
19: * 3. All advertising materials mentioning features or use of this software
20: * must display the following acknowledgement:
21: * This product includes software developed by the University of
22: * California, Berkeley and its contributors.
23: * 4. Neither the name of the University nor the names of its contributors
24: * may be used to endorse or promote products derived from this software
25: * without specific prior written permission.
26: *
27: * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
28: * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
29: * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
30: * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
31: * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
32: * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
33: * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
34: * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
35: * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
36: * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
37: * SUCH DAMAGE.
38: *
1.9 cgd 39: * @(#)procfs_status.c 8.4 (Berkeley) 6/15/94
1.1 cgd 40: */
41:
42: #include <sys/param.h>
43: #include <sys/systm.h>
44: #include <sys/time.h>
45: #include <sys/kernel.h>
46: #include <sys/proc.h>
47: #include <sys/vnode.h>
48: #include <sys/ioctl.h>
49: #include <sys/tty.h>
50: #include <sys/resource.h>
51: #include <sys/resourcevar.h>
52: #include <miscfs/procfs/procfs.h>
53:
1.6 mycroft 54: int
1.16.2.1! nathanw 55: procfs_dostatus(curp, l, pfs, uio)
1.1 cgd 56: struct proc *curp;
1.16.2.1! nathanw 57: struct lwp *l;
1.1 cgd 58: struct pfsnode *pfs;
59: struct uio *uio;
60: {
61: struct session *sess;
62: struct tty *tp;
63: struct ucred *cr;
1.16.2.1! nathanw 64: struct proc *p = l->l_proc;
1.1 cgd 65: char *ps;
66: char *sep;
67: int pid, ppid, pgid, sid;
68: int i;
69: int xlen;
70: int error;
1.16 david 71: char psbuf[256+MAXHOSTNAMELEN]; /* XXX - conservative */
1.1 cgd 72:
73: if (uio->uio_rw != UIO_READ)
74: return (EOPNOTSUPP);
75:
76: pid = p->p_pid;
77: ppid = p->p_pptr ? p->p_pptr->p_pid : 0,
78: pgid = p->p_pgrp->pg_id;
79: sess = p->p_pgrp->pg_session;
1.14 thorpej 80: sid = sess->s_sid;
1.1 cgd 81:
1.10 jtc 82: /* comm pid ppid pgid sid maj,min ctty,sldr start ut st wmsg uid gid groups ... */
1.1 cgd 83:
84: ps = psbuf;
1.15 perry 85: memcpy(ps, p->p_comm, MAXCOMLEN);
1.1 cgd 86: ps[MAXCOMLEN] = '\0';
87: ps += strlen(ps);
1.13 christos 88: ps += sprintf(ps, " %d %d %d %d ", pid, ppid, pgid, sid);
1.1 cgd 89:
1.4 cgd 90: if ((p->p_flag&P_CONTROLT) && (tp = sess->s_ttyp))
1.13 christos 91: ps += sprintf(ps, "%d,%d ", major(tp->t_dev),
1.12 christos 92: minor(tp->t_dev));
1.1 cgd 93: else
1.13 christos 94: ps += sprintf(ps, "%d,%d ", -1, -1);
1.1 cgd 95:
96: sep = "";
97: if (sess->s_ttyvp) {
1.13 christos 98: ps += sprintf(ps, "%sctty", sep);
1.1 cgd 99: sep = ",";
100: }
101: if (SESS_LEADER(p)) {
1.13 christos 102: ps += sprintf(ps, "%ssldr", sep);
1.1 cgd 103: sep = ",";
104: }
105: if (*sep != ',')
1.13 christos 106: ps += sprintf(ps, "noflags");
1.1 cgd 107:
1.16.2.1! nathanw 108: if (l->l_flag & L_INMEM)
1.13 christos 109: ps += sprintf(ps, " %ld,%ld",
1.1 cgd 110: p->p_stats->p_start.tv_sec,
111: p->p_stats->p_start.tv_usec);
112: else
1.13 christos 113: ps += sprintf(ps, " -1,-1");
1.6 mycroft 114:
1.5 cgd 115: {
116: struct timeval ut, st;
117:
118: calcru(p, &ut, &st, (void *) 0);
1.13 christos 119: ps += sprintf(ps, " %ld,%ld %ld,%ld",
1.5 cgd 120: ut.tv_sec,
121: ut.tv_usec,
122: st.tv_sec,
123: st.tv_usec);
124: }
1.1 cgd 125:
1.13 christos 126: ps += sprintf(ps, " %s",
1.16.2.1! nathanw 127: (l->l_wchan && l->l_wmesg) ? l->l_wmesg : "nochan");
1.1 cgd 128:
129: cr = p->p_ucred;
130:
1.13 christos 131: ps += sprintf(ps, " %d", cr->cr_uid);
132: ps += sprintf(ps, " %d", cr->cr_gid);
1.7 mycroft 133: for (i = 0; i < cr->cr_ngroups; i++)
1.13 christos 134: ps += sprintf(ps, ",%d", cr->cr_groups[i]);
135: ps += sprintf(ps, "\n");
1.1 cgd 136:
137: xlen = ps - psbuf;
138: xlen -= uio->uio_offset;
139: ps = psbuf + uio->uio_offset;
1.3 ws 140: xlen = imin(xlen, uio->uio_resid);
1.1 cgd 141: if (xlen <= 0)
142: error = 0;
143: else
144: error = uiomove(ps, xlen, uio);
145:
146: return (error);
147: }
CVSweb <webmaster@jp.NetBSD.org>