SETPGID(2)

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

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 */
pid_t getpgrp(pid_t pid);            /* versão BSD */

int setpgrp(void);                   /* versão System V */
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()).

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.

DE ACORDO COM
setpgid() e a versão de getpgrp() com nenhum argumento em conformidade com POSIX.1-2001.

POSIX.1-2001 também especifica getpgid() e a versão de setpgrp() que não aceita argumentos. (POSIX.1-2008 marca esta especificação de setpgrp() como obsoleta.)

A versão de getpgrp() com um argumento e a versão de setpgrp() que leva dois argumentos derivam de 4.2BSD, e não são especificados por POSIX.1.

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)

COLOFÃO
Esta página faz parte da versão 5.13 do projeto Linux man-pages. Uma descrição do projeto, informações sobre relatórios de bugs e a versão mais recente desta página podem ser encontradas em https://www.kernel.org/doc/man-pages/.

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).