---
name: "thr_kill2"
section: "2"
platform: "freebsd"
package: "base"
version: "16.0-CURRENT-20261027-61c70dc16a79"
release: "FreeBSD 16.0-CURRENT (2026-10-27)"
platforms: ["freebsd"]
url: "https://new.carta.tech/thr_kill"
---

# thr\_kill2(2)

send signal to thread

Part of [thr\_kill(2)](/thr_kill/2.md).

## NAME

**thr\_kill** – send signal to thread

## LIBRARY

Standard C Library (libc, -lc)

## SYNOPSIS

**#include \<sys/thr.h\>**

*int*\

**thr\_kill**(*long id*, *int sig*);

*int*\

**thr\_kill2**(*pid\_t pid*, *long id*, *int sig*);

## DESCRIPTION

The **thr\_kill**() and **thr\_kill2**() system calls allow sending a signal, specified by the *sig* argument, to some threads in a process. For the **thr\_kill**() function, signalled threads are always limited to the current process. For the **thr\_kill2**() function, the *pid* argument specifies the process with threads to be signalled.

The *id* argument specifies which threads get the signal. If *id* is equal to -1, all threads in the specified process are signalled. Otherwise, only the thread with the thread identifier equal to the argument is signalled.

The *sig* argument defines the delivered signal. It must be a valid signal number or zero. In the latter case no signal is actually sent, and the call is used to verify the liveness of the thread.

The signal is delivered with siginfo si\_code set to SI\_LWP.

## RETURN VALUES

If successful, **thr\_kill**() and **thr\_kill2**() will return zero, otherwise -1 is returned, and *errno* is set to indicate the error.

## ERRORS

The **thr\_kill**() and **thr\_kill2**() operations return the following errors:

- \[EINVAL\]

  The *sig* argument is not zero and does not specify valid signal.

- \[ESRCH\]

  The specified process or thread was not found.

Additionally, the **thr\_kill2**() may return the following errors:

- \[EPERM\]

  The current process does not have sufficient privilege to check existence or send a signal to the specified process.

## SEE ALSO

[\_umtx\_op(2)](/_umtx_op/2.md), [kill(2)](/kill/2.md), [thr\_exit(2)](/thr_exit/2.md), [thr\_new(2)](/thr_new/2.md), [thr\_self(2)](/thr_self/2.md), [thr\_set\_name(2)](/thr_set_name/2.md), [pthread\_kill(3)](/pthread_kill/3.md), [signal(3)](/signal/3.md)

## STANDARDS

The **thr\_kill**() and **thr\_kill2**() system calls are non-standard and are used by the library “libthr” to implement IEEE Std 1003.1-2001 (“POSIX.1”) [pthread(3)](/pthread/3.md) functionality.

## HISTORY

The **thr\_kill**() and **thr\_kill2**() system calls first appeared in FreeBSD 5.2.
