setpgid(2)

NOME
setpgid, getpgid, setpgrp, getpgrp - define/obtém o grupo do processo

BIBLIOTECA
Biblioteca C Padrão (libc, -lc)

SINOPSE
#include <unistd.h>

int setpgid(pid_t pid, pid_t pgid);
pid_t getpgid(pid_t pid);

pid_t getpgrp(void);                            /* versão POSIX.1 */
[[deprecated]] pid_t getpgrp(pid_t pid);        /* versão BSD */

int setpgrp(void);                              /* Versão System V */
[[deprecated]] int setpgrp(pid_t pid, pid_t pgid);  /* Versão BSD */

    Requisitos de macro de teste de recursos para o glibc (consulte feature_test_macros(7)):

getpgid():
    _XOPEN_SOURCE >= 500
        || /* Desde o glibc 2.12: */ _POSIX_C_SOURCE >= 200809L

setpgrp() (POSIX.1):
    _XOPEN_SOURCE >= 500
        || /* Desde o glibc 2.19: */ _DEFAULT_SOURCE
        || /* glibc <= 2.19: */ _SVID_SOURCE

setpgrp() (BSD), getpgrp() (BSD):
    [Estes estão disponíveis apenas antes do glibc 2.19]
    _BSD_SOURCE &&
        ! (_POSIX_SOURCE || _POSIX_C_SOURCE || _XOPEN_SOURCE
            || _GNU_SOURCE || _SVID_SOURCE)

DESCRIÇÃO
Todas essas interfaces estão disponíveis no Linux e são usadas para obter e definir o ID do grupo de processos (PGID) de um processo. As formas preferidas, especificadas por POSIX.1, de fazer isso são: getpgrp(void), para recuperar o PGID do processo de chamada; e setpgid(), para definir o PGID de um processo.

setpgid() define o PGID do processo especificado por pid para pgid. Se pid é zero, a ID de processo do processo atual é usado. Se pgid é zero, o PGID do processo especificado por pid é tornado o mesmo que seu ID de processo. Se setpgid() é usado para mover processo de um grupo de processo para outro (como é feito por alguns shells ao criar canais de processamento), ambos grupos de processo devem ser partes da mesma sessão (consulte setsid(2) e credentials(7)). Neste caso, o pgid especifica um grupo de processo existente a ser unido e o ID da sessão daquele grupo dever combinar com a ID da sessão do processo que é unido.

A versão POSIX.1 de getpgrp(), que não leva argumentos, retorna o PGID do processo de chamada.

getpgid() retorna o PGID do processo especificado por pid. Se pid é zero, o ID de processo do processo atual é usada. (Recuperar o PGID de um processo diferente do chamador raramente é necessário, e o getpgrp() POSIX.1 é o preferido para essa tarefa.)

O setpgrp() do estilo System V, que leva nenhum argumento, é equivalente a setpgid(0, 0).

A chamada setpgrp() específica do BSD, que leva os argumentos pid e pgid, é uma função de wrapper que chama

    setpgid(pid, pgid)

Desde o glibc 2.19, a função setpgrp() específica do BSD não é mais exposta por <unistd.h>; as chamadas devem ser substituídas pela chamada setpgid() mostrada acima.

A chamada getpgrp() específica do BSD, que leva um único argumento pid, é uma função de wrapper que chama

    getpgid(pid)

Desde o glibc 2.19, a função getpgrp() específica do BSD não é mais exposta por <unistd.h>; as chamadas devem ser substituídas por chamadas para getpgrp() POSIX.1 que não leva argumentos (se a intenção for obter o PGID do chamador), ou com a chamada getpgid() mostrada acima.

VALOR DE RETORNO
Em caso de sucesso, setpgid() e setpgrp() retornam zero. Em caso de erro, -1 é retornado e errno é definido para indicar o erro.

O getpgrp() POSIX.1 sempre retorna o PGID do chamador.

getpgid(), e o getpgrp() específico do BSD, retornam o grupo de processo em caso de sucesso. Em caso de erro, -1 é retornado e errno é definido para indicar o erro.

ERROS

EACCES
    Foi feita uma tentativa de alterar o ID do grupo de processo de um dos filhos do processo de chamada e o filho já havia executado um execve(2) (setpgid(), setpgrp()).

EINVAL
    pgid é menor que 0 (setpgid(), setpgrp()).

EPERM
    Foi feita uma tentativa de mover um processo para um grupo de processos em uma sessão diferente, ou para alterar o ID do grupo de processos de um dos filhos do processo de chamada e o filho estava em uma sessão diferente, ou para alterar o ID do grupo de processos de um líder de sessão (setpgid(), setpgrp()).

EPERM
    O grupo de processos alvo não existe. (setpgid(), setpgrp()).

ESRCH
    Para getpgid(): pid não corresponde a nenhum processo. Para setpgid(): pid não é o processo de chamada e não é filho do processo de chamada.

PADRÕES

getpgid()
setpgid()
getpgrp() (sem argumento)
    POSIX.1-2024.

setpgrp()
getpgrp() (1 argumento)
    Nenhum.

HISTÓRICO

getpgid()
setpgid()
getpgrp() (sem argumento)
    POSIX.1-2001.

setpgrp() (sem argumento)
    POSIX.1-2001. Descontinuado no POSIX.1-2008. Removido no POSIX.1-2024.

setpgrp() (2 argumentos)
getpgrp() (1 argumento)
    4.2BSD.

NOTAS
Um filho criado por meio de fork(2) herda o ID do grupo de processo de seu pai. O PGID é preservado em um execve(2).

Cada grupo de processo é um membro de uma sessão e cada processo é um membro da sessão da qual seu grupo de processo é um membro. (Veja credentials(7).)

Uma sessão pode ter um terminal de controle. A qualquer momento, um (e apenas um) dos grupos de processos na sessão pode ser o grupo de processos em primeiro plano para o terminal; os grupos de processos restantes estão em segundo plano. Se um sinal é gerado a partir do terminal (por exemplo, digitando a tecla de interrupção para gerar SIGINT), esse sinal é enviado para o grupo de processo de primeiro plano. (Consulte termios(3) para uma descrição dos caracteres que geram sinais.) Apenas o grupo de processos de primeiro plano pode usar read(2) a partir do terminal; se um grupo de processo em segundo plano tenta usar read(2) a partir do terminal, então o grupo recebe um sinal SIGTTIN, que o suspende. As funções tcgetpgrp(3) e tcsetpgrp(3) são usadas para obter/definir o grupo de processos de primeiro plano do terminal de controle.

As chamadas setpgid() e getpgrp() são usadas por programas como bash(1) para criar grupos de processos a fim de implementar o controle de trabalho do shell.

Se o término de um processo faz com que um grupo de processo se torne órfão, e se qualquer membro do grupo de processo recém-órfão for interrompido, um sinal SIGHUP seguido por um sinal SIGCONT será enviado para cada processo no grupo de processo recentemente órfão. Um grupo de processos órfão é aquele em que o pai de cada membro do grupo de processos também é membro do grupo de processos ou é membro de um grupo de processos em uma sessão diferente (consulte também credenciais(7)).

VEJA TAMBÉM
getuid(2), setsid(2), tcgetpgrp(3), tcsetpgrp(3), termios(3), credentials(7)

TRADUÇÃO
A tradução para português brasileiro desta página man foi criada por André Luiz Fassone <lonely_wolf@ig.com.br>, Marcelo Pereira da Silva <marcelo@pereira.com> e Rafael Fontenelle <rafaelff@gnome.org>.

Esta tradução é uma documentação livre; leia a Licença Pública Geral GNU Versão 3 (https://www.gnu.org/licenses/gpl-3.0.html) ou posterior para as condições de direitos autorais. Nenhuma responsabilidade é aceita.

Se você encontrar algum erro na tradução desta página de manual, envie um e-mail para a lista de discussão de tradutores (debian-l10n-portuguese@lists.debian.org).