proc.h

来自「基于组件方式开发操作系统的OSKIT源代码」· C头文件 代码 · 共 422 行 · 第 1/2 页

H
422
字号
	char	p_pad2;			/* alignment */	short	p_locks;		/* DEBUG: lockmgr count of held locks */	short	p_simple_locks;		/* DEBUG: count of held simple locks */	unsigned int	p_stops;	/* procfs event bitmask */	unsigned int	p_stype;	/* procfs stop event type */	char	p_step;			/* procfs stop *once* flag */	unsigned char	p_pfsflags;	/* procfs flags */	char	p_pad3[2];		/* padding for alignment */	register_t p_retval[2];		/* syscall aux returns */	struct	sigiolst p_sigiolst;	/* list of sigio sources */	int	p_sigparent;		/* signal to parent on exit */	sigset_t p_oldsigmask;		/* saved mask from before sigpause */	int	p_sig;			/* for core dump/debugger XXX */        u_long	p_code;	  	        /* for core dump/debugger XXX *//* End area that is zeroed on creation. */#define	p_endzero	p_startcopy/* The following fields are all copied upon creation in fork. */#define	p_startcopy	p_sigmask	sigset_t p_sigmask;	/* Current signal mask. */	u_char	p_priority;	/* Process priority. */	u_char	p_usrpri;	/* User-priority based on p_cpu and p_nice. */	char	p_nice;		/* Process "nice" value. */	char	p_comm[MAXCOMLEN+1];	struct 	pgrp *p_pgrp;	/* Pointer to process group. */	struct 	sysentvec *p_sysent; /* System call dispatch information. */	struct	rtprio p_rtprio;	/* Realtime priority. *//* End area that is copied on creation. */#define	p_endcopy	p_addr	struct	user *p_addr;	/* Kernel virtual addr of u-area (PROC ONLY). */	struct	mdproc p_md;	/* Any machine-dependent fields. */	u_short	p_xstat;	/* Exit status for wait; also stop signal. */	u_short	p_acflag;	/* Accounting flags. */	struct	rusage *p_ru;	/* Exit information. XXX */	int	p_nthreads;	/* number of threads (only in leader) */	void	*p_aioinfo;	/* ASYNC I/O info */	int	p_wakeup;	/* thread id */	struct proc *p_peers;		struct proc *p_leader;	struct	pasleep p_asleep;	/* Used by asleep()/await(). */};#endif /* !OSKIT */#define	p_session	p_pgrp->pg_session#define	p_pgid		p_pgrp->pg_id/* Status values. */#define	SIDL	1		/* Process being created by fork. */#define	SRUN	2		/* Currently runnable. */#define	SSLEEP	3		/* Sleeping on an address. */#define	SSTOP	4		/* Process debugging or suspension. */#define	SZOMB	5		/* Awaiting collection by parent. *//* These flags are kept in p_flags. */#define	P_ADVLOCK	0x00001	/* Process may hold a POSIX advisory lock. */#define	P_CONTROLT	0x00002	/* Has a controlling terminal. */#define	P_INMEM		0x00004	/* Loaded into memory. */#define	P_NOCLDSTOP	0x00008	/* No SIGCHLD when children stop. */#define	P_PPWAIT	0x00010	/* Parent is waiting for child to exec/exit. */#define	P_PROFIL	0x00020	/* Has started profiling. */#define	P_SELECT	0x00040	/* Selecting; wakeup/waiting danger. */#define	P_SINTR		0x00080	/* Sleep is interruptible. */#define	P_SUGID		0x00100	/* Had set id privileges since last exec. */#define	P_SYSTEM	0x00200	/* System proc: no sigs, stats or swapping. */#define	P_TIMEOUT	0x00400	/* Timing out during sleep. */#define	P_TRACED	0x00800	/* Debugged process being traced. */#define	P_WAITED	0x01000	/* Debugging process has waited for child. */#define	P_WEXIT		0x02000	/* Working on exiting. */#define	P_EXEC		0x04000	/* Process called exec. *//* Should probably be changed into a hold count. */#define	P_NOSWAP	0x08000	/* Another flag to prevent swap out. */#define	P_PHYSIO	0x10000	/* Doing physical I/O. *//* Should be moved to machine-dependent areas. */#define	P_OWEUPC	0x20000	/* Owe process an addupc() call at next ast. */#define	P_SWAPPING	0x40000	/* Process is being swapped. */#define	P_SWAPINREQ	0x80000	/* Swapin request due to wakeup *//* Marked a kernel thread */#define P_KTHREADP	0x200000 /* Process is really a kernel thread */#define	P_NOCLDWAIT	0x400000 /* No zombies if child dies *//* * MOVE TO ucred.h? * * Shareable process credentials (always resident).  This includes a reference * to the current user credentials as well as real and saved ids that may be * used to change ids. */struct	pcred {	struct	ucred *pc_ucred;	/* Current credentials. */	uid_t	p_ruid;			/* Real user id. */	uid_t	p_svuid;		/* Saved effective user id. */	gid_t	p_rgid;			/* Real group id. */	gid_t	p_svgid;		/* Saved effective group id. */	int	p_refcnt;		/* Number of references. */};#ifdef KERNEL#ifdef MALLOC_DECLAREMALLOC_DECLARE(M_SESSION);MALLOC_DECLARE(M_SUBPROC);#endif/* * We use process IDs <= PID_MAX; PID_MAX + 1 must also fit in a pid_t, * as it is used to represent "no process group". */#define	PID_MAX		99999#define	NO_PID		100000#define SESS_LEADER(p)	((p)->p_session->s_leader == (p))#define	SESSHOLD(s)	((s)->s_count++)#define	SESSRELE(s) {							\	if (--(s)->s_count == 0)					\		FREE(s, M_SESSION);					\}extern void stopevent(struct proc*, unsigned int, unsigned int);#define	STOPEVENT(p,e,v)	do { \	if ((p)->p_stops & (e)) stopevent(p,e,v); } while (0)/* hold process U-area in memory, normally for ptrace/procfs work */#define PHOLD(p) {							\	if ((p)->p_lock++ == 0 && ((p)->p_flag & P_INMEM) == 0)	\		faultin(p);						\}#define PRELE(p)	(--(p)->p_lock)#define	PIDHASH(pid)	(&pidhashtbl[(pid) & pidhash])extern LIST_HEAD(pidhashhead, proc) *pidhashtbl;extern u_long pidhash;#define	PGRPHASH(pgid)	(&pgrphashtbl[(pgid) & pgrphash])extern LIST_HEAD(pgrphashhead, pgrp) *pgrphashtbl;extern u_long pgrphash;extern struct proc *curproc;		/* Current running proc. */extern struct proc proc0;		/* Process slot for swapper. */extern int hogticks;			/* Limit on kernel cpu hogs. */extern int nprocs, maxproc;		/* Current and max number of procs. */extern int maxprocperuid;		/* Max procs per uid. */extern int switchticks;			/* `ticks' at last context switch. */extern struct timeval switchtime;	/* Uptime at last context switch */LIST_HEAD(proclist, proc);extern struct proclist allproc;		/* List of all processes. */extern struct proclist zombproc;	/* List of zombie processes. */extern struct proc *initproc, *pageproc; /* Process slots for init, pager. */#define	NQS	32			/* 32 run queues. */extern struct prochd qs[];extern struct prochd rtqs[];extern struct prochd idqs[];extern int	whichqs;	/* Bit mask summary of non-empty Q's. */extern int	whichrtqs;	/* Bit mask summary of non-empty Q's. */extern int	whichidqs;	/* Bit mask summary of non-empty Q's. */struct	prochd {	struct	proc *ph_link;		/* Linked list of running processes. */	struct	proc *ph_rlink;};struct proc *pfind __P((pid_t));	/* Find process by id. */struct pgrp *pgfind __P((pid_t));	/* Find process group by id. */struct vm_zone;extern struct vm_zone *proc_zone;int	chgproccnt __P((uid_t uid, int diff));int	enterpgrp __P((struct proc *p, pid_t pgid, int mksess));void	fixjobc __P((struct proc *p, struct pgrp *pgrp, int entering));int	inferior __P((struct proc *p));int	leavepgrp __P((struct proc *p));void	mi_switch __P((void));void	procinit __P((void));void	resetpriority __P((struct proc *));int	roundrobin_interval __P((void));void	setrunnable __P((struct proc *));void	setrunqueue __P((struct proc *));void	sleepinit __P((void));void	remrq __P((struct proc *));void	cpu_switch __P((struct proc *));void	unsleep __P((struct proc *));void	wakeup_one __P((void *chan));void	cpu_exit __P((struct proc *)) __dead2;void	exit1 __P((struct proc *, int)) __dead2;void	cpu_fork __P((struct proc *, struct proc *));int	fork1 __P((struct proc *, int));int	trace_req __P((struct proc *));void	cpu_wait __P((struct proc *));int	cpu_coredump __P((struct proc *, struct vnode *, struct ucred *));void		setsugid __P((struct proc *p));#endif	/* KERNEL */#endif	/* !_SYS_PROC_H_ */

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?