---
name: "killpg"
section: "3"
platform: "linux"
package: "man-pages"
version: "6.19-1"
release: "Arch Linux 2026-11-01"
platforms: ["linux"]
url: "https://new.carta.tech/killpg/3"
---

# killpg(3)

send signal to a process group

## NAME

killpg - send signal to a process group

## LIBRARY

Standard C library (*libc*, *-lc*)

## 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 <= 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 to indicate the error.

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

## VERSIONS

There are various differences between the permission checking in BSD-type systems and System V-type systems. See the POSIX rationale for [**kill**(3p)](/kill/3p.md). 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)*.

## STANDARDS

POSIX.1-2008.

## HISTORY

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

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