---
name: "killpg"
section: "2"
platform: "linux"
package: "manpages-dev"
version: "4.16-2"
release: "Debian 10 (Buster)"
platforms: ["linux", "freebsd", "macos"]
url: "https://new.carta.tech/killpg/3"
---

# killpg(2)

send signal to a process group

Part of [killpg(3)](/killpg/3.md).

## NAME

killpg - send signal to a process group

## SYNOPSIS

**#include \<signal.h\>**

**int killpg(int** *pgrp***, int** *sig***);**

Feature Test Macro Requirements for glibc (see [**feature\_test\_macros**(7)](/feature_test_macros/7.md)):

- **killpg**():

  \_XOPEN\_SOURCE \>= 500\
       \|\| /\* Since glibc 2.19: \*/ \_DEFAULT\_SOURCE\
       \|\| /\* Glibc versions \<= 2.19: \*/ \_BSD\_SOURCE

## DESCRIPTION

**killpg**() sends the signal *sig* to the process group *pgrp*. See [**signal**(7)](/signal/7.md) for a list of signals.

If *pgrp* is 0, **killpg**() sends the signal to the calling process's process group. (POSIX says: if *pgrp* is less than or equal to 1, the behavior is undefined.)

For the permissions required to send a signal to another process, see [**kill**(2)](/kill/2.md).

## RETURN VALUE

On success, zero is returned. On error, -1 is returned, and *errno* is set appropriately.

## ERRORS

- **EINVAL**

  *sig* is not a valid signal number.

- **EPERM**

  The process does not have permission to send the signal to any of the target processes. For the required permissions, see [**kill**(2)](/kill/2.md).

- **ESRCH**

  No process can be found in the process group specified by *pgrp*.

- **ESRCH**

  The process group was given as 0 but the sending process does not have a process group.

## CONFORMING TO

POSIX.1-2001, POSIX.1-2008, SVr4, 4.4BSD (**killpg**() first appeared in 4BSD).

## NOTES

There are various differences between the permission checking in BSD-type systems and System V-type systems. See the POSIX rationale for **kill**(). A difference not mentioned by POSIX concerns the return value **EPERM**: BSD documents that no signal is sent and **EPERM** returned when the permission check failed for at least one target process, while POSIX documents **EPERM** only when the permission check failed for all target processes.

### C library/kernel differences

On Linux, **killpg**() is implemented as a library function that makes the call *kill(-pgrp, sig)*.

## SEE ALSO

[**getpgrp**(2)](/getpgrp/2.md), [**kill**(2)](/kill/2.md), [**signal**(2)](/signal/2.md), [**capabilities**(7)](/capabilities/7.md), [**credentials**(7)](/credentials/7.md)

## COLOPHON

This page is part of release 4.16 of the Linux *man-pages* project. A description of the project, information about reporting bugs, and the latest version of this page, can be found at https://www.kernel.org/doc/man-pages/.
