---
name: "PHOLD"
section: "9"
platform: "freebsd"
package: "base"
version: "16.0-CURRENT-20261027-61c70dc16a79"
release: "FreeBSD 16.0-CURRENT (2026-10-27)"
platforms: ["freebsd"]
url: "https://new.carta.tech/PHOLD"
---

# PHOLD(9)

hold a process

## NAME

**PHOLD** – hold a process

## SYNOPSIS

**#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*);

## DESCRIPTION

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.

## AUTHORS

This manual page was written by Mark Johnston ⟨*markj@FreeBSD.org*⟩.
