setpgid, getpgid, setpgrp, getpgrp - set/get process group


       #include <unistd.h>

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


       setpgid sets the process group ID of the process specified
       by  pid  to  pgid.   If pid is zero, the process ID of the
       current process is used.  If pgid is zero, the process  ID
       of  the  process  specified by pid is used.  If setpgid is
       used to move a process from one process group  to  another
       (as  is done by some shells when creating pipelines), both
       process groups must be part of the same session.  In  this
       case,  the  pgid specifies an existing process group to be
       joined and the session ID of that  group  must  match  the
       session ID of the joining process.

       getpgid returns the process group ID of the process speci­
       fied by pid.  If pid is zero, the process ID of  the  cur­
       rent process is used.

       In  the  Linux  DLL  4.4.1  library,  setpgrp simply calls

       getpgrp is equivalent to getpgid(0).  Each  process  group
       is  a  member of a session and each process is a member of
       the session of which its process group is a member.

       Process groups are used for distribution of  signals,  and
       by  terminals  to arbitrate requests for their input: Pro­
       cesses that have the same process group  as  the  terminal
       are  foreground and may read, while others will block with
       a signal if they attempt to read.  These  calls  are  thus
       used  by  programs such as csh(1) to create process groups
       in implementing job control.  The TIOCGPGRP and  TIOCSPGRP
       calls described in termios(4) are used to get/set the pro­
       cess group of the control terminal.

       If a session has a controlling terminal, CLOCAL is not set
       and  a  hangup  occurs,  then the session leader is sent a
       SIGHUP.  If the session leader exits,  the  SIGHUP  signal
       will  be  sent  to  each process in the foreground process
       group of the controlling terminal.

       If the exit of the  process  causes  a  process  group  to
       become  orphaned,  and if any member of the newly-orphaned
       process group is stopped, then a SIGHUP signal followed by


       On success, setpgid and setpgrp return zero.  On error, -1
       is returned, and errno is set appropriately.

       getpgid  returns a process group on success.  On error, -1
       is returned, and errno is set appropriately.

       getpgrp always returns the current process group.


       EINVAL pgid is less than 0.

       EPERM  Various permission violations.

       ESRCH  pid does not match any process.


       The functions setpgid and getpgrp conform to POSIX.1.  The
       function  setpgrp  is  from BSD 4.2.  The function getpgid
       conforms to SVr4.


       POSIX took setpgid from the BSD  function  setpgrp.   Also
       SysV  has a function with the same name, but it is identi­
       cal to setsid(2).


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