2.11BSD/sys/h/proc.h

Compare this file to the similar file:
Show the results in this format:

/*
 * Copyright (c) 1986 Regents of the University of California.
 * All rights reserved.  The Berkeley software License Agreement
 * specifies the terms and conditions for redistribution.
 *
 *	@(#)proc.h	1.5 (2.11BSD) 1999/9/5
 */

#ifndef	_SYS_PROC_H_
#define	_SYS_PROC_H_

/*
 * One structure allocated per active
 * process. It contains all data needed
 * about the process while the
 * process may be swapped out.
 * Other per process data (user.h)
 * is swapped with the process.
 */
struct	proc {
	struct	proc *p_nxt;	/* linked list of allocated proc slots */
	struct	proc **p_prev;	/* also zombies, and free proc's */
	struct	proc *p_pptr;	/* pointer to process structure of parent */
	short	p_flag;
	short	p_uid;		/* user id, used to direct tty signals */
	short	p_pid;		/* unique process id */
	short	p_ppid;		/* process id of parent */
	long	p_sig;		/* signals pending to this process */
	char	p_stat;
	char	p_dummy;	/* room for one more, here */

	/*
	 * Union to overwrite information no longer needed by ZOMBIED
	 * process with exit information for the parent process.  The
	 * two structures have been carefully set up to use the same
	 * amount of memory.  Must be very careful that any values in
	 * p_alive are not used for zombies (zombproc).
	 */
	union {
	    struct {
		char	P_pri;		/* priority, negative is high */
		char	P_cpu;		/* cpu usage for scheduling */
		char	P_time;		/* resident time for scheduling */
		char	P_nice;		/* nice for cpu usage */
		char	P_slptime;	/* secs sleeping */
		char	P_ptracesig;	/* used between parent & traced child */
		struct proc *P_hash;	/* hashed based on p_pid */
		long	P_sigmask;	/* current signal mask */
		long	P_sigignore;	/* signals being ignored */
		long	P_sigcatch;	/* signals being caught by user */
		short	P_pgrp;		/* name of process group leader */
		struct	proc *P_link;	/* linked list of running processes */
		memaddr	P_addr;		/* address of u. area */
		memaddr	P_daddr;	/* address of data area */
		memaddr	P_saddr;	/* address of stack area */
		size_t	P_dsize;	/* size of data area (clicks) */
		size_t	P_ssize;	/* size of stack segment (clicks) */
		caddr_t	P_wchan;	/* event process is awaiting */
		struct	text *P_textp;	/* pointer to text structure */
		struct	k_itimerval P_realtimer;
	    } p_alive;
	    struct {
		short	P_xstat;	/* exit status for wait */
		struct k_rusage P_ru;	/* exit information */
	    } p_dead;
	} p_un;
};
#define	p_pri		p_un.p_alive.P_pri
#define	p_cpu		p_un.p_alive.P_cpu
#define	p_time		p_un.p_alive.P_time
#define	p_nice		p_un.p_alive.P_nice
#define	p_slptime	p_un.p_alive.P_slptime
#define	p_hash		p_un.p_alive.P_hash
#define	p_ptracesig	p_un.p_alive.P_ptracesig
#define	p_sigmask	p_un.p_alive.P_sigmask
#define	p_sigignore	p_un.p_alive.P_sigignore
#define	p_sigcatch	p_un.p_alive.P_sigcatch
#define	p_pgrp		p_un.p_alive.P_pgrp
#define	p_link		p_un.p_alive.P_link
#define	p_addr		p_un.p_alive.P_addr
#define	p_daddr		p_un.p_alive.P_daddr
#define	p_saddr		p_un.p_alive.P_saddr
#define	p_dsize		p_un.p_alive.P_dsize
#define	p_ssize		p_un.p_alive.P_ssize
#define	p_wchan		p_un.p_alive.P_wchan
#define	p_textp		p_un.p_alive.P_textp
#define	p_realtimer	p_un.p_alive.P_realtimer
#define	p_clktim	p_realtimer.it_value

#define	p_xstat		p_un.p_dead.P_xstat
#define	p_ru		p_un.p_dead.P_ru

#define	PIDHSZ		16
#define	PIDHASH(pid)	((pid) & (PIDHSZ - 1))

#if defined(KERNEL) && !defined(SUPERVISOR)
struct	proc *pidhash[PIDHSZ];
struct	proc *pfind();
struct	proc proc[], *procNPROC;	/* the proc table itself */
struct	proc *freeproc, *zombproc, *allproc, *qs;
			/* lists of procs in various states */
int	nproc;
#endif

/* stat codes */
#define	SSLEEP	1		/* awaiting an event */
#define	SWAIT	2		/* (abandoned state) */
#define	SRUN	3		/* running */
#define	SIDL	4		/* intermediate state in process creation */
#define	SZOMB	5		/* intermediate state in process termination */
#define	SSTOP	6		/* process being traced */

/* flag codes */
#define	SLOAD		0x0001	/* in core */
#define	SSYS		0x0002	/* swapper or pager process */
#define	SLOCK		0x0004	/* process being swapped out */
#define	SSWAP		0x0008	/* save area flag */
#define	P_TRACED	0x0010	/* process is being traced */
#define	P_WAITED	0x0020	/* another tracing flag */
#define	SULOCK		0x0040	/* user settable lock in core */
#define	P_SINTR		0x0080	/* sleeping interruptibly */
#define	SVFORK		0x0100	/* process resulted from vfork() */
#define	SVFPRNT		0x0200	/* parent in vfork, waiting for child */
#define	SVFDONE		0x0400	/* parent has released child in vfork */
	/*		0x0800	/* unused */
#define	P_TIMEOUT	0x1000	/* tsleep timeout expired */
#define	P_NOCLDSTOP	0x2000	/* no SIGCHLD signal to parent */
#define	P_SELECT	0x4000	/* selecting; wakeup/waiting danger */
	/*		0x8000	/* unused */

#define	S_DATA	0		/* specified segment */
#define	S_STACK	1

#endif	/* !_SYS_PROC_H_ */