ptyspawn

## Name

ptyspawn — run a program under a pty

## Synopsis

`ptyspawn` [-2] [-3] [-x] {`subprogram`} {`args`...}

## Description

ptyspawn runs `subprogram` under a pty. ptyspawn will exit when `subprogram` exits, with the same exit code.

ptyspawn must be invoked with descriptor 4 pointing to the pty master, descriptor 5 pointing to the pty slave, and environment variable `TTY` giving the name of the pty slave. On POSIX systems, ptyspawn must not be a process group leader.

If `subprogram` stops, ptyspawn writes its stop signal, as a single byte, to descriptor 9, if descriptor 9 is open. When ptyspawn receives a SIGCONT signal, it sends SIGCONT to `subprogram`'s process group.

`subprogram` will have descriptors 0, 1, and 2 pointing to the pty slave. Its controlling tty will be that pty. Descriptor 3 will point to `/dev/tty`. Descriptors 4, 5, and 9 will be closed. `subprogram` will be a process group leader.

## Options

-2

  Preserve descriptor 2 in `subprogram`; do not replace it with the pty slave.

-3

  Preserve descriptor 3 in `subprogram`; do not replace it with `/dev/tty`.

-x

  Reserve the pty for exclusive use. This prevents all attempts to open the pty, even through `/dev/tty`.

## History

ptyspawn was originally part of Daniel J. Bernstein's ptyget toolset in 1996.

## Author

Original code and documentation by Daniel J. Bernstein. Documentation modernizations by Jonathan de Boyne Pollard.