Provided by: manpages-es_1.55-10_all bug

NOMBRE

       setpgid, getpgid, setpgrp, getpgrp - obtener/establecer el grupo de procesos

SINOPSIS

       #include <unistd.h>

       int setpgid(pid_t pid, pid_t pgid);
       pid_t getpgid(pid_t pid);
       int setpgrp(void);
       pid_t getpgrp(void);

DESCRIPCIÓN

       setpgid  pone el ID del grupo del proceso especificado por pid a pgid.  Si pid es cero, se
       emplea el PID del proceso en curso. Si  pgid  es  cero,  se  emplea  el  PID  del  proceso
       especificado por pid.  Si setpgid se utiliza para mover un proceso de un grupo de procesos
       a otro (como hacen algunos shells cuando crean tuberías), ambos grupos de  procesos  deben
       formar  parte  de  la  misma  sesión.  En  este caso, pgid especifica el grupo de procesos
       existente en el que vamos a entrar, y el ID de  sesión  de  ese  grupo  de  procesos  debe
       coincidir con el ID de sesión del proceso que quiere entrar.

       getpgid  devuelve el ID del grupo de proceso del especificado por pid.  Si pid es cero, se
       emplea el PID del proceso en curso.

       La llamada setpgrp() es equivalente a setpgid(0,0).

       De manera similar getpgrp() es equivalente  a  getpgid(0).   Cada  grupo  de  procesos  es
       miembro  de  una  sesión  y  cada  proceso  es  miembro de la sesión de la que su grupo de
       procesos es miembro.

       Los grupos de proceso se emplean para la distribución de señales,  y  por  las  terminales
       para  arbitrar  peticiones  para  su  entrada:  los  procesos que tienen el mismo grupo de
       proceso que la terminal son  en  primer  plano  y  pueden  leer,  mientras  que  otros  se
       bloquearán con una señal si intentan leer.

       Estas  llamadas se usan pues por programas como csh(1) para crear grupos de proceso cuando
       implementan el control de trabajos.  Las  llamadas  TIOCGPGRP  y  TIOCSPGRP  descritas  en
       termios(3) se emplean para obtener/poner el grupo de proceso de la terminal de control.

       Si  una  sesión posee una terminal controladora, CLOCAL no está configurada y si se cierra
       la sesión, entonces se enviará una señal SIGHUP al lider de sesión. Si el lider de  sesión
       existe, se enviará la señal SIGHUP a cada proceso del grupo de procesos en primer plano de
       la terminal controladora.

       Si la terminación del proceso hace que un  grupo  de  procesos  se  quede  huérfano  y  si
       cualquier  miembro  del  grupo  de  procesos  que  se acaba de quedar huérfano se detiene,
       entonces se enviará una señal SIGHUP seguida de una señal SIGCONT a  cada  proceso  en  el
       grupo de procesos que se acaba de quedar huérfano.

VALOR DEVUELTO

       En caso de éxito, setpgid y setpgrp devuelven cero. En caso de error. devuelven -1 y ponen
       un valor apropiado en errno.

       getpgid devuelve un grupo de proceso si acaba bien; -1 en caso de error, y pone  un  valor
       apropiado en errno.

       getpgrp siempre devuelve el grupo de proceso actual.

ERRORES

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

       EACCES Se  intentó  cambiar  el identificador de grupo de procesos de uno de los hijos del
              proceso invocador y el proceso  hijo  ya  había  realizado  una  llamada  a  execve
              (setpgid, setpgrp).

       EPERM  Se  intentó  cambiar  el grupo de procesos de un proceso a otro grupo en una sesión
              diferente, o cambiar el identificador de grupo de procesos de uno de los hijos  del
              proceso  invocador  estando  el  proceso hijo en una sesión diferente, o cambiar el
              identificador de grupo de procesos de un líder de sesión (setpgid, setpgrp).

       ESRCH  Para getpgid: pid no concuerda  con  ningún  proceso.   Para  setpgid:  pid  no  se
              corresponde con el proceso actual ni con uno de sus hijos.

CONFORME A

       Las  funciones setpgid y getpgrp siguen el estándar POSIX.1.  La función setpgrp es de BSD
       4.2.  La función getpgid conforma con SVr4.

OBSERVACIONES

       POSIX tomó setpgid de la función BSD setpgrp.  SysV también tiene una función con el mismo
       nombre, pero es idéntica a setsid(2).

       Para   obtener   los   prototipos  bajo  glibc,  debe  definir  tanto  _XOPEN_SOURCE  como
       _XOPEN_SOURCE_EXTENDED, o usar "#define _XOPEN_SOURCE n" para algún entero n mayor o igual
       a 500.

VÉASE TAMBIÉN

       getuid(2), setsid(2), tcgetpgrp(3), tcsetpgrp(3), termios(3)