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

# tcsetpgrp(3)

set foreground process group ID

## NAME

**tcsetpgrp** – set foreground process group ID

## LIBRARY

Standard C Library (libc, -lc)

## SYNOPSIS

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

*int*\

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

## DESCRIPTION

If the process has a controlling terminal, the **tcsetpgrp**() function sets the foreground process group ID associated with the terminal device to *pgrp\_id*. The terminal device associated with *fd* must be the controlling terminal of the calling process and the controlling terminal must be currently associated with the session of the calling process. The value of *pgrp\_id* must be the same as the process group ID of a process in the same session as the calling process.

## RETURN VALUES

The **tcsetpgrp()** function returns the value 0 if successful; otherwise the value -1 is returned and the global variable errno is set to indicate the error.

## ERRORS

The **tcsetpgrp**() function will fail if:

- \[EBADF\]

  The *fd* argument is not a valid file descriptor.

- \[EINVAL\]

  An invalid value of *pgrp\_id* was specified.

- \[ENOTTY\]

  The calling process does not have a controlling terminal, or the file represented by *fd* is not the controlling terminal, or the controlling terminal is no longer associated with the session of the calling process.

- \[EPERM\]

  The *pgrp\_id* argument does not match the process group ID of a process in the same session as the calling process.

## SEE ALSO

[setpgid(2)](/setpgid/2.md), [setsid(2)](/setsid/2.md), [tcgetpgrp(3)](/tcgetpgrp/3.md)

## STANDARDS

The **tcsetpgrp**() function is expected to be compliant with the IEEE Std 1003.1-1988 (“POSIX.1”) specification.
