📄 proc.h
字号:
#define p_endcopy p_thread void *p_thread; /* Id for this "thread"; Mach glue. XXX */ 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 */};#define p_session p_pgrp->pg_session#define p_pgid p_pgrp->pg_id/* * Status values. * * A note about SRUN and SONPROC: SRUN indicates that a process is * runnable but *not* yet running, i.e. is on a run queue. SONPROC * indicates that the process is actually executing on a CPU, i.e. * it is no longer on a run queue. */#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. */#define SDEAD 6 /* Process is almost a zombie. */#define SONPROC 7 /* Process is currently on a CPU */#define P_ZOMBIE(p) ((p)->p_stat == SZOMB || (p)->p_stat == SDEAD)/* These flags are kept in p_flag. */#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. */#define P_OWEUPC 0x08000 /* Owe process an addupc() call at next ast. */#define P_FSTRACE 0x10000 /* Debugger process being traced by procfs */#define P_NOCLDWAIT 0x20000 /* No zombies if child dies */#define P_32 0x40000 /* 32-bit process (used on 64-bit kernels) */#define P_BIGLOCK 0x80000 /* Process needs kernel "big lock" to run *//* * Macro to compute the exit signal to be delivered. */#define P_EXITSIG(p) (((p)->p_flag & (P_TRACED|P_FSTRACE)) ? SIGCHLD : \ p->p_exitsig)/* * 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. */};LIST_HEAD(proclist, proc); /* a list of processes *//* * This structure associates a proclist with its lock. */struct proclist_desc { struct proclist *pd_list; /* the list */ /* * XXX Add a pointer to the proclist's lock eventually. */};#ifdef _KERNEL/* * 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 30000#define NO_PID 30001#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); \}#define PHOLD(p) { \ if ((p)->p_holdcnt++ == 0 && ((p)->p_flag & P_INMEM) == 0) \ uvm_swapin(p); \}#define PRELE(p) (--(p)->p_holdcnt)/* * Flags passed to fork1(). */#define FORK_PPWAIT 0x01 /* block parent until child exit */#define FORK_SHAREVM 0x02 /* share vmspace with parent */#define FORK_SHARECWD 0x04 /* share cdir/rdir/cmask */#define FORK_SHAREFILES 0x08 /* share file descriptors */#define FORK_SHARESIGS 0x10 /* share signal actions */#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;#ifdef OSKIT#include "oskit_uvm_vmspace.h"#else/* * Allow machine-dependent code to override curproc in <machine/cpu.h> for * its own convenience. Otherwise, we declare it as appropriate. */#if !defined(curproc)#if defined(MULTIPROCESSOR)#define curproc curcpu()->ci_curproc /* Current running proc. */#elseextern struct proc *curproc; /* Current running proc. */#endif /* MULTIPROCESSOR */#endif /* ! curproc */extern struct proc proc0; /* Process slot for swapper. */#endif /*OSKIT*/extern int nprocs, maxproc; /* Current and max number of procs. *//* Process list lock; see kern_proc.c for locking protocol details. */extern struct lock proclist_lock;extern struct proclist allproc; /* List of all processes. */extern struct proclist zombproc; /* List of zombie processes. */extern struct proclist deadproc; /* List of dead processes. */extern struct simplelock deadproc_slock;extern struct proc *initproc; /* Process slots for init, pager. */extern const struct proclist_desc proclists[];extern struct pool proc_pool; /* memory pool for procs */extern struct pool pcred_pool; /* memory pool for pcreds */extern struct pool plimit_pool; /* memory pool for plimits */extern struct pool rusage_pool; /* memory pool for rusages */struct proc *pfind __P((pid_t)); /* Find process by id. */struct pgrp *pgfind __P((pid_t)); /* Find process group by id. */struct simplelock;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, struct proc *q));int leavepgrp __P((struct proc *p));void yield __P((void));void preempt __P((struct proc *));void mi_switch __P((struct proc *));void pgdelete __P((struct pgrp *pgrp));void procinit __P((void));void remrunqueue __P((struct proc *));void resetpriority __P((struct proc *));void setrunnable __P((struct proc *));void setrunqueue __P((struct proc *));void suspendsched __P((void));int ltsleep __P((void *chan, int pri, const char *wmesg, int timo, __volatile struct simplelock *));#ifdef OSKITvoid unsleep __P((struct lwp *));#elsevoid unsleep __P((struct proc *));#endifvoid wakeup __P((void *chan));void wakeup_one __P((void *chan));void reaper __P((void *));void exit1 __P((struct proc *, int));void exit2 __P((struct proc *));int fork1 __P((struct proc *, int, int, void *, size_t, void (*)(void *), void *, register_t *, struct proc **));void rqinit __P((void));int groupmember __P((gid_t, struct ucred *));void cpu_switch __P((struct proc *));void cpu_wait __P((struct proc *));void cpu_exit __P((struct proc *));void cpu_fork __P((struct proc *, struct proc *, void *, size_t, void (*)(void *), void *));void child_return __P((void *));int proc_isunder __P((struct proc *, struct proc*));void proclist_lock_read __P((void));void proclist_unlock_read __P((void));int proclist_lock_write __P((void));void proclist_unlock_write __P((int));void p_sugid __P((struct proc*));/* Compatbility with old, non-interlocked tsleep call. */#define tsleep(chan, pri, wmesg, timo) \ ltsleep(chan, pri, wmesg, timo, NULL)#if defined(MULTIPROCESSOR)void proc_trampoline_mp(void); /* XXX */#endif#endif /* _KERNEL */#endif /* !_SYS_PROC_H_ */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -