---
name: "pkill"
section: "1"
platform: "linux"
package: "procps-ng"
version: "4.0.7-1"
release: "Arch Linux 2026-11-01"
platforms: ["linux", "freebsd", "openbsd", "macos"]
url: "https://new.carta.tech/pgrep"
---

# pkill(1)

look up, signal, or wait for processes based on name and other attributes

Part of [pgrep(1)](/pgrep/1.md).

## NAME

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

## SYNOPSIS

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

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

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

## 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

- **-***signal* **--signal** *signal*

  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**

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

- **-A**, **--ignore-ancestors**

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

- **-c**, **--count**

  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*

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

- **-e**, **--echo**

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

- **-f**, **--full**

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

- **-F**, **--pidfile** *file*

  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*,...

  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*,...

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

- **-H**, **--require-handler**

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

- **-i**, **--ignore-case**

  Match processes case-insensitively.

- **-l**, **--list-name**

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

- **-L**, **--logpidfile**

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

- **-m**, **--mrelease**

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

- **-n**, **--newest**

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

- **-o**, **--oldest**

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

- **-O**, **--older** *secs*

  Select processes older than secs.

- **-p**, **--pid** *pid*,...

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

- **-P**, **--parent** *ppid*,...

  Only match processes whose parent process ID is listed.

- **-q**, **--queue** *value*

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

- **-Q**, **--shell-quote**

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

- **-r**, **--runstates** *D,R,S,Z,*...

  Match only processes which match the process state.

- **-s**, **--session** *sid*,...

  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*,...

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

- **-u**, **--euid** *euid*,...

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

- **-U**, **--uid** *uid*,...

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

- **-v**, **--inverse**

  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**

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

- **-x**, **--exact**

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

- **--cgroup** *name***,...**

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

- **--env** *name*\[*=value*\],...

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

- **--ns** *pid*

  **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***,...**

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

- **--quiet**

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

- **-V**, **--version**

  Display version information and exit.

- **-h**, **--help**

  Display help and exit.

## OPERANDS

- *pattern*

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

## 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

- **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

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)](/pidfd_send_signal/2.md) instead of [**kill**(2)](/kill/2.md) or [**sigqueue**(3)](/sigqueue/3.md) to send a signal to the target process if it is able to get the process file descriptor.

## 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)](/pidfd_open/2.md) system call which first appeared in Linux 5.3.

## SEE ALSO

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

## REPORTING BUGS

Please send bug reports to ⟨procps@freelists.org⟩.
