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 + -
显示快捷键?