PGREP(1) General Commands Manual PGREP(1)

# [NAME](#NAME)

pgrep, pkill, pidwait - look up, signal, or wait for processes based on name and other attributes

# [SYNOPSIS](#SYNOPSIS)

**pgrep** \[*option* ...] *pattern*

**pkill** \[*option* ...] *pattern*

**pidwait** \[*option* ...] *pattern*

# [DESCRIPTION](#DESCRIPTION)

**pgrep** looks through the currently running processes and lists the process IDs which match the selection criteria to stdout. All the criteria have to match. For example,

$ pgrep -u root sshd

will only list the processes whose name include **sshd** AND owned by **root**. On the other hand,

$ pgrep -u root,daemon

will list the processes owned by **root** OR **daemon**.

**pkill** will send the specified signal (by default **SIGTERM**) to each process instead of listing them on stdout.

**pidwait** will wait for each process instead of listing them on stdout.

# [OPTIONS](#OPTIONS)

[**-signal**](#signal)

[**--signal** *signal*](#signal~2)

Defines the signal to send to each matched process. Either the numeric or the symbolic signal name can be used. In **pgrep** or **pidwait** mode only the long option can be used and has no effect unless used in conjunction with **--require-handler** to filter to processes with a userspace signal handler present for a particular signal.

[**-a**, **--list-full**](#a)

List the full command line as well as the process ID. (**pgrep** only.)

[**-A**, **--ignore-ancestors**](#A)

Ignore all ancestors of **pgrep**, **pkill**, or **pidwait**. For example, this can be useful when elevating with **sudo** or similar tools.

[**-c**, **--count**](#c)

Suppress normal output; instead print a count of matching processes. When count does not match anything, e.g. returns zero, the command will return non-zero value. Note that for pkill and pidwait, the count is the number of matching processes, not the processes that were successfully signaled or waited for.

[**-d**, **--delimiter** *delimiter*](#d)

Sets the string used to delimit each process ID in the output (by default a newline). (**pgrep** only.)

[**-e**, **--echo**](#e)

Display name and PID of the process being killed. (**pkill** only.)

[**-f**, **--full**](#f)

The *pattern* is normally only matched against the process name. When **-f** is set, the full command line is used.

[**-F**, **--pidfile** *file*](#F)

Read *PID*s from *file*. This option is more useful for **pkill** or **pidwait** than **pgrep**. The filename "-" can be used to read from *STDIN*. Conflicts with the **--pid** option.

[**-g**, **--pgroup** *pgrp*,...](#g)

Only match processes in the process group IDs listed. Process group 0 is translated into **pgrep**'s, **pkill**'s, or **pidwait**'s own process group.

[**-G**, **--group** *gid*,...](#G)

Only match processes whose real group ID is listed. Either the numerical or symbolical value may be used.

[**-H**, **--require-handler**](#H)

Only match processes with a userspace signal handler present for the signal to be sent.

[**-i**, **--ignore-case**](#i)

Match processes case-insensitively.

[**-l**, **--list-name**](#l)

List the process name as well as the process ID. (**pgrep** only.)

[**-L**, **--logpidfile**](#L)

Fail if pidfile (see **-F**) not locked.

[**-m**, **--mrelease**](#m)

After sending the signal, invoke the **process\_mrelease**() system call to immediately free the target process's memory.

[**-n**, **--newest**](#n)

Select only the newest (most recently started) of the matching processes.

[**-o**, **--oldest**](#o)

Select only the oldest (least recently started) of the matching processes.

[**-O**, **--older** *secs*](#O)

Select processes older than secs.

[**-p**, **--pid** *pid*,...](#p)

Only match processes whose process ID is listed. Conflicts with the **--pidfile** option.

[**-P**, **--parent** *ppid*,...](#P)

Only match processes whose parent process ID is listed.

[**-q**, **--queue value**](#q)

Send the integer *value* along with the signal. This option will either use [**pidfd\_send\_signal**(2)](/man/os/procps/pidfd_send_signal.2) with a value applied or [**sigqueue**(3)](/man/os/procps/sigqueue.3) rather than [**kill**(2)](/man/os/procps/kill.2). If the receiving process has installed a handler for this signal using the SA\_SIGINFO flag to [**sigaction**(2)](/man/os/procps/sigaction.2), then it can obtain this data via the si\_value field of the siginfo\_t structure.

[**-Q**, **--shell-quote**](#Q)

Output the command line in shell-quoted form. (**pgrep** only.)

[**-r**, **--runstates** *D,R,S,Z,*...](#r)

Match only processes which match the process state.

[**-s**, **--session** *sid*,...](#s)

Only match processes whose process session ID is listed. Session ID 0 is translated into **pgrep**'s, **pkill**'s, or **pidwait**'s own session ID.

[**-t**, **--terminal** *term*,...](#t)

Only match processes whose controlling terminal is listed. The terminal name should be specified without the "/dev/" prefix.

[**-u**, **--euid** *euid*,...](#u)

Only match processes whose effective user ID is listed. Either the numerical or symbolical value may be used.

[**-U**, **--uid** *uid*,...](#U)

Only match processes whose real user ID is listed. Either the numerical or symbolical value may be used.

[**-v**, **--inverse**](#v)

Negates the matching. This option is usually used in **pgrep**'s or **pidwait**'s context. In **pkill**'s context the short option is disabled to avoid accidental usage of the option.

[**-w**, **--lightweight**](#w)

Shows all thread ids instead of pids in **pgrep**'s or **pidwait**'s context. In **pkill**'s context this option is disabled.

[**-x**, **--exact**](#x)

Only match processes whose names (or command lines if **-f** is specified) **exactly** match the *pattern*.

[**--cgroup name,...**](#cgroup)

Match on provided control group (cgroup) v2 name. See [**cgroups**(7)](/man/os/procps/cgroups.7)

[**--env name**\[*=value*\],...](#env)

Match on process that have these environment variables. If the *=value* parameter is not defined then only the variable name is matched.

[**--ns pid**](#ns)

Match processes that belong to the same namespaces. Required to run as root to match processes from other users. See **--nslist** for how to limit which namespaces to match.

[**--nslist name,...**](#nslist)

Match only the provided namespaces. Available namespaces: ipc, mnt, net, pid, user, uts.

[**--quiet**](#quiet)

Do not write anything to standard output (**pgrep** only).

[**-V**, **--version**](#V)

Display version information and exit.

[**-h**, **--help**](#h)

Display help and exit.

# [OPERANDS](#OPERANDS)

[*pattern*](#pattern)

Specifies an Extended Regular Expression for matching against the process names or command lines.

# [EXAMPLES](#EXAMPLES)

Example 1: Find the process ID of the **named** daemon:

$ pgrep -u root named

Example 2: Make **syslog** reread its configuration file:

$ pkill -HUP syslogd

Example 3: Give detailed information on all **bash** processes:

$ ps -fp $(pgrep -d, -x bash)

Example 4: Make all **chrome** processes run nicer:

$ renice +4 $(pgrep chrome)

Example 5: Wait for a process with a known PID to finish:

$ echo ${PID} | pidwait -F -

# [EXIT STATUS](#EXIT_STATUS)

**0**

One or more processes matched the criteria. For **pkill** and **pidwait**, one or more processes must also have been successfully signalled or waited for.

**1**

No processes matched or none of them could be signalled.

**2**

Syntax error in the command line.

**3**

Fatal error: out of memory etc.

# [NOTES](#NOTES)

The process name used for matching is limited to the 15 characters present in the output of /proc/*pid*/stat. Use the **-f** option to match against the complete command line, /proc/*pid*/cmdline. Threads may not have the same process name as the parent process but will have the same command line.

The running **pgrep**, **pkill**, or **pidwait** process will never report itself as a match.

The **-O --older** option will silently fail if */proc* is mounted with the *subset=pid* option.

**pkill** will attempt to use [**pidfd\_send\_signal**(2)](/man/os/procps/pidfd_send_signal.2) instead of [**kill**(2)](/man/os/procps/kill.2) or [**sigqueue**(3)](/man/os/procps/sigqueue.3) to send a signal to the target process if it is able to get the process file descriptor.

# [BUGS](#BUGS)

The options **-n** and **-o** and **-v** can not be combined. Let me know if you need to do this.

If processes start in the same clock tick (usually but not always a 100th of a second), the options **-n** and **-o** will not be able to distinguish which process started in the same clock tick and may give erroneous results.

Defunct processes are reported.

**pidwait** requires the [**pidfd\_open**(2)](/man/os/procps/pidfd_open.2) system call which first appeared in Linux 5.3.

# [SEE ALSO](#SEE_ALSO)

[**killall**(1)](/man/os/procps/killall.1), [**kill**(1)](/man/os/procps/kill.1), [**ps**(1)](/man/os/procps/ps.1), [**skill**(1)](/man/os/procps/skill.1), [**kill**(2)](/man/os/procps/kill.2), [**sigaction**(2)](/man/os/procps/sigaction.2), [**pidfd\_open**(2)](/man/os/procps/pidfd_open.2), [**pidfd\_send\_signal**(2)](/man/os/procps/pidfd_send_signal.2), [**sigqueue**(3)](/man/os/procps/sigqueue.3), [**cgroups**(7)](/man/os/procps/cgroups.7), [**regex**(7)](/man/os/procps/regex.7), [**signal**(7)](/man/os/procps/signal.7)

# [REPORTING BUGS](#REPORTING_BUGS)

Please send bug reports to [procps@freelists.org](mailto:procps@freelists.org).

2025-12-29 procps-ng

---

Document: pkill(1) from procps 4.0.7-r3 (Chainguard OS)
Source: https://downloads.sourceforge.net/project/procps-ng/Production/procps-ng-4.0.7.tar.xz
