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

# tgkill(2)

send a signal to a thread

Part of [tkill(2)](/tkill/2.md).

## NAME

tkill, tgkill - send a signal to a thread

## LIBRARY

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

## SYNOPSIS

```
#include <signal.h>           /* Definition of SIG* constants */
#include <sys/syscall.h>      /* Definition of SYS_* constants */
#include <unistd.h>
```

**\[\[deprecated\]\] int syscall(SYS\_tkill, pid\_t** *tid***, int** *sig***);**

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

**int tgkill(pid\_t** *tgid***, pid\_t** *tid***, int** *sig***);**

*Note*: glibc provides no wrapper for **tkill**(), necessitating the use of [**syscall**(2)](/syscall/2.md).

## DESCRIPTION

**tgkill**() sends the signal *sig* to the thread with the thread ID *tid* in the thread group *tgid*. (By contrast, [**kill**(2)](/kill/2.md) can be used to send a signal only to a process (i.e., thread group) as a whole, and the signal will be delivered to an arbitrary thread within that process.)

**tkill**() is an obsolete predecessor to **tgkill**(). It allows only the target thread ID to be specified, which may result in the wrong thread being signaled if a thread terminates and its thread ID is recycled. Avoid using this system call.

These are the raw system call interfaces, meant for internal thread library use.

## RETURN VALUE

On success, zero is returned. On error, -1 is returned, and *errno* is set to indicate the error.

## ERRORS

- **EAGAIN**

  The **RLIMIT\_SIGPENDING** resource limit was reached and *sig* is a real-time signal.

- **EAGAIN**

  Insufficient kernel memory was available and *sig* is a real-time signal.

- **EINVAL**

  An invalid thread ID, thread group ID, or signal was specified.

- **EPERM**

  Permission denied. For the required permissions, see [**kill**(2)](/kill/2.md).

- **ESRCH**

  No process with the specified thread ID (and thread group ID) exists.

## STANDARDS

Linux.

## HISTORY

- **tkill**()

  Linux 2.4.19 / 2.5.4.

- **tgkill**()

  Linux 2.5.75, glibc 2.30.

## NOTES

See the description of **CLONE\_THREAD** in [**clone**(2)](/clone/2.md) for an explanation of thread groups.

## SEE ALSO

[**clone**(2)](/clone/2.md), [**gettid**(2)](/gettid/2.md), [**kill**(2)](/kill/2.md), [**rt\_sigqueueinfo**(2)](/rt_sigqueueinfo/2.md)
