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

# tcgetpgrp(3)

get and set terminal foreground process group

## NAME

tcgetpgrp, tcsetpgrp - get and set terminal foreground process group

## LIBRARY

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

## SYNOPSIS

```
#include <unistd.h>
```

**pid\_t tcgetpgrp(int** *fd***);** **int tcsetpgrp(int** *fd***, pid\_t** *pgrp***);**

## DESCRIPTION

The function **tcgetpgrp**() returns the process group ID of the foreground process group on the terminal associated to *fd*, which must be the controlling terminal of the calling process.

The function **tcsetpgrp**() makes the process group with process group ID *pgrp* the foreground process group on the terminal associated to *fd*, which must be the controlling terminal of the calling process, and still be associated with its session. Moreover, *pgrp* must be a (nonempty) process group belonging to the same session as the calling process.

If **tcsetpgrp**() is called by a member of a background process group in its session, and the calling process is not blocking or ignoring **SIGTTOU**, a **SIGTTOU** signal is sent to all members of this background process group.

## RETURN VALUE

When *fd* refers to the controlling terminal of the calling process, the function **tcgetpgrp**() will return the foreground process group ID of that terminal if there is one, and some value larger than 1 that is not presently a process group ID otherwise. When *fd* does not refer to the controlling terminal of the calling process, -1 is returned, and *errno* is set to indicate the error.

When successful, **tcsetpgrp**() returns 0. Otherwise, it returns -1, and *errno* is set to indicate the error.

## ERRORS

- **EBADF**

  *fd* is not a valid file descriptor.

- **EINVAL**

  *pgrp* has an unsupported value.

- **ENOTTY**

  The calling process does not have a controlling terminal, or it has one but it is not described by *fd*, or, for **tcsetpgrp**(), this controlling terminal is no longer associated with the session of the calling process.

- **EPERM**

  *pgrp* has a supported value, but is not the process group ID of a process in the same session as the calling process.

## ATTRIBUTES

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

| | | |
| --- | --- | --- |
| **Interface** | **Attribute** | **Value** |
| **tcgetpgrp**(), **tcsetpgrp**() | Thread safety | MT-Safe |

## VERSIONS

These functions are implemented via the **TIOCGPGRP** and **TIOCSPGRP** ioctls.

## STANDARDS

POSIX.1-2008.

## HISTORY

POSIX.1-2001.

The ioctls appeared in 4.2BSD. The functions are POSIX inventions.

## SEE ALSO

[**setpgid**(2)](/setpgid/2.md), [**setsid**(2)](/setsid/2.md), [**credentials**(7)](/credentials/7.md)
