Provided by: freebsd-manpages_12.0-1_all bug


     PHOLD — hold a process


     #include <sys/proc.h>

     PHOLD(struct proc *p);

     _PHOLD(struct proc *p);

     PRELE(struct proc *p);

     _PRELE(struct proc *p);

     PROC_ASSERT_HELD(struct proc *p);

     PROC_ASSERT_NOT_HELD(struct proc *p);


     The PHOLD() macro increments the hold count of a process, and the PRELE() macro decrements
     the hold count of a process.

     If a process with a non-zero hold count attempts to exit, it will sleep until its hold count
     has reached zero before the kernel begins releasing resources associated with the process.
     Once a process has started exiting, it is invalid to increase its hold count.  Thus, callers
     must not attempt to hold a process that has the P_WEXIT flag set.  The VM daemon will not
     swap out the kernel stack of a thread belonging to a process with a non-zero hold count.

     The _PHOLD() and _PRELE() macros are identical to PHOLD() and PRELE(), except that they must
     be called with the process lock held.


     This manual page was written by Mark Johnston <>.