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

# pthread\_tryjoin\_np(3)

try to join with a terminated thread

## NAME

pthread\_tryjoin\_np, pthread\_timedjoin\_np - try to join with a terminated thread

## LIBRARY

POSIX threads library (*libpthread*, *-lpthread*)

## SYNOPSIS

```
#define _GNU_SOURCE             /* See feature_test_macros(7) */
#include <pthread.h>
```

**int pthread\_tryjoin\_np(pthread\_t** *thread***, void \*\****retval***);** **int pthread\_timedjoin\_np(pthread\_t** *thread***, void \*\****retval***,**                          **const struct timespec \****abstime***);**

## DESCRIPTION

These functions operate in the same way as [**pthread\_join**(3)](/pthread_join/3.md), except for the differences described on this page.

The **pthread\_tryjoin\_np**() function performs a nonblocking join with the thread *thread*, returning the exit status of the thread in *\*retval*. If *thread* has not yet terminated, then instead of blocking, as is done by [**pthread\_join**(3)](/pthread_join/3.md), the call returns an error.

The **pthread\_timedjoin\_np**() function performs a join-with-timeout. If *thread* has not yet terminated, then the call blocks until a maximum time, specified in *abstime*, measured against the **CLOCK\_REALTIME** clock. If the timeout expires before *thread* terminates, the call returns an error. The *abstime* argument is a [**timespec**(3)](/timespec/3.md) structure, specifying an absolute time measured since the Epoch (see [**time**(2)](/time/2.md)).

## RETURN VALUE

On success, these functions return 0; on error, they return an error number.

## ERRORS

These functions can fail with the same errors as [**pthread\_join**(3)](/pthread_join/3.md). **pthread\_tryjoin\_np**() can in addition fail with the following error:

- **EBUSY**

  *thread* had not yet terminated at the time of the call.

**pthread\_timedjoin\_np**() can in addition fail with the following errors:

- **EINVAL**

  *abstime* value is invalid (*tv\_sec* is less than 0 or *tv\_nsec* is greater than 1e9).

- **ETIMEDOUT**

  The call timed out before *thread* terminated.

**pthread\_timedjoin\_np**() never returns the error **EINTR**.

## ATTRIBUTES

For an explanation of the terms used in this section, see [**attributes**(7)](/attributes/7.md).

| | | |
| --- | --- | --- |
| **Interface** | **Attribute** | **Value** |
| **pthread\_tryjoin\_np**(), **pthread\_timedjoin\_np**() | Thread safety | MT-Safe |

## STANDARDS

GNU; hence the suffix "\_np" (nonportable) in the names.

## HISTORY

glibc 2.3.3.

## BUGS

The **pthread\_timedjoin\_np**() function measures time by internally calculating a relative sleep interval that is then measured against the **CLOCK\_MONOTONIC** clock instead of the **CLOCK\_REALTIME** clock. Consequently, the timeout is unaffected by discontinuous changes to the **CLOCK\_REALTIME** clock.

## EXAMPLES

The following code waits to join for up to 5 seconds:

```
struct timespec ts;
int s;
...
if (clock_gettime(CLOCK_REALTIME, &ts) == -1) {
    /* Handle error */
}
ts.tv_sec += 5;
s = pthread_timedjoin_np(thread, NULL, &ts);
if (s != 0) {
    /* Handle error */
}
```

## SEE ALSO

[**clock\_gettime**(2)](/clock_gettime/2.md), [**pthread\_exit**(3)](/pthread_exit/3.md), [**pthread\_join**(3)](/pthread_join/3.md), [**timespec**(3)](/timespec/3.md), [**pthreads**(7)](/pthreads/7.md)
