2004-11-03 13:51:07 +00:00
|
|
|
.\" Copyright (c) 1983, 1991 Regents of the University of California.
|
|
|
|
.\" All rights reserved.
|
|
|
|
.\"
|
|
|
|
.\" Redistribution and use in source and binary forms, with or without
|
|
|
|
.\" modification, are permitted provided that the following conditions
|
|
|
|
.\" are met:
|
|
|
|
.\" 1. Redistributions of source code must retain the above copyright
|
|
|
|
.\" notice, this list of conditions and the following disclaimer.
|
|
|
|
.\" 2. Redistributions in binary form must reproduce the above copyright
|
|
|
|
.\" notice, this list of conditions and the following disclaimer in the
|
|
|
|
.\" documentation and/or other materials provided with the distribution.
|
|
|
|
.\" 3. All advertising materials mentioning features or use of this software
|
|
|
|
.\" must display the following acknowledgement:
|
|
|
|
.\" This product includes software developed by the University of
|
|
|
|
.\" California, Berkeley and its contributors.
|
|
|
|
.\" 4. Neither the name of the University nor the names of its contributors
|
|
|
|
.\" may be used to endorse or promote products derived from this software
|
|
|
|
.\" without specific prior written permission.
|
|
|
|
.\"
|
|
|
|
.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
|
|
|
.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
|
|
.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
|
|
.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
|
|
|
.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
|
|
.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
|
|
|
.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
|
|
|
.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
|
|
|
.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
|
|
|
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
|
|
|
.\" SUCH DAMAGE.
|
|
|
|
.\"
|
|
|
|
.\" @(#)getpgrp.2 6.4 (Berkeley) 3/10/91
|
|
|
|
.\"
|
|
|
|
.\" Modified 1993-07-24 by Rik Faith <faith@cs.unc.edu>
|
|
|
|
.\" Modified 1995-04-15 by Michael Chastain <mec@shell.portal.com>:
|
|
|
|
.\" Added 'getpgid'.
|
|
|
|
.\" Modified 1996-07-21 by Andries Brouwer <aeb@cwi.nl>
|
|
|
|
.\" Modified 1996-11-06 by Eric S. Raymond <esr@thyrsus.com>
|
|
|
|
.\" Modified 1999-09-02 by Michael Haardt <michael@moria.de>
|
2004-11-03 14:43:40 +00:00
|
|
|
.\" Modified 2002-01-18 by Michael Kerrisk <mtk-manpages@gmx.net>
|
2004-11-03 13:51:07 +00:00
|
|
|
.\" Modified 2003-01-20 by Andries Brouwer <aeb@cwi.nl>
|
|
|
|
.\"
|
|
|
|
.TH SETPGID 2 2003-01-20 "Linux" "Linux Programmer's Manual"
|
|
|
|
.SH NAME
|
|
|
|
setpgid, getpgid, setpgrp, getpgrp \- set/get process group
|
|
|
|
.SH SYNOPSIS
|
|
|
|
.B #include <unistd.h>
|
|
|
|
.sp
|
|
|
|
.BI "int setpgid(pid_t " pid ", pid_t " pgid );
|
|
|
|
.br
|
|
|
|
.BI "pid_t getpgid(pid_t " pid );
|
|
|
|
.br
|
|
|
|
.B int setpgrp(void);
|
|
|
|
.br
|
|
|
|
.B pid_t getpgrp(void);
|
|
|
|
.SH DESCRIPTION
|
2005-10-19 06:54:38 +00:00
|
|
|
.BR setpgid ()
|
2004-11-03 13:51:07 +00:00
|
|
|
sets the process group ID of the process specified by
|
|
|
|
.I pid
|
|
|
|
to
|
|
|
|
.IR pgid .
|
|
|
|
If
|
|
|
|
.I pid
|
|
|
|
is zero, the process ID of the current process is used. If
|
|
|
|
.I pgid
|
|
|
|
is zero, the process ID of the process specified by
|
|
|
|
.I pid
|
2005-10-19 06:54:38 +00:00
|
|
|
is used. If \fBsetpgid\fP() is used to move a process from one process
|
2004-11-03 13:51:07 +00:00
|
|
|
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 \fIpgid\fP specifies an existing process group to be joined and the
|
|
|
|
session ID of that group must match the session ID of the joining process.
|
|
|
|
|
2005-10-19 06:54:38 +00:00
|
|
|
.BR getpgid ()
|
2004-11-03 13:51:07 +00:00
|
|
|
returns the process group ID of the process specified by
|
|
|
|
.IR pid .
|
|
|
|
If
|
|
|
|
.I pid
|
|
|
|
is zero, the process ID of the current process is used.
|
|
|
|
|
|
|
|
The call
|
2005-10-19 07:07:02 +00:00
|
|
|
.BR setpgrp ()
|
2004-11-03 13:51:07 +00:00
|
|
|
is equivalent to
|
|
|
|
.BR setpgid(0,0) .
|
|
|
|
|
|
|
|
Similarly,
|
2005-10-19 07:07:02 +00:00
|
|
|
.BR getpgrp ()
|
2004-11-03 13:51:07 +00:00
|
|
|
is equivalent to
|
|
|
|
.BR 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: Processes 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
|
|
|
|
.BR csh (1)
|
|
|
|
to create process groups in implementing job control. The
|
|
|
|
.B TIOCGPGRP
|
|
|
|
and
|
|
|
|
.B TIOCSPGRP
|
|
|
|
calls described in
|
|
|
|
.BR termios (3)
|
|
|
|
are used to get/set the process 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 a SIGCONT signal will be sent to each process
|
|
|
|
in the newly-orphaned process group.
|
|
|
|
|
|
|
|
.SH "RETURN VALUE"
|
|
|
|
On success,
|
2005-10-28 13:40:41 +00:00
|
|
|
.BR setpgid ()
|
|
|
|
and
|
|
|
|
.BR setpgrp ()
|
2004-11-03 13:51:07 +00:00
|
|
|
return zero. On error, \-1 is returned, and
|
|
|
|
.I errno
|
|
|
|
is set appropriately.
|
|
|
|
|
2005-10-19 06:54:38 +00:00
|
|
|
.BR getpgid ()
|
2004-11-03 13:51:07 +00:00
|
|
|
returns a process group on success.
|
|
|
|
On error, \-1 is returned, and
|
|
|
|
.I errno
|
|
|
|
is set appropriately.
|
|
|
|
|
2005-10-19 06:54:38 +00:00
|
|
|
.BR getpgrp ()
|
2004-11-03 13:51:07 +00:00
|
|
|
always returns the current process group.
|
|
|
|
.SH ERRORS
|
|
|
|
.TP
|
|
|
|
.B EACCES
|
|
|
|
An attempt was made to change the process group ID
|
|
|
|
of one of the children of the calling process and the child had
|
2005-10-19 08:35:30 +00:00
|
|
|
already performed an \fBexecve\fP()
|
|
|
|
(\fBsetpgid\fP(), \fBsetpgrp\fP()).
|
2004-11-03 13:51:07 +00:00
|
|
|
.TP
|
|
|
|
.B EINVAL
|
|
|
|
.I pgid
|
|
|
|
is less than 0
|
2005-10-19 08:35:30 +00:00
|
|
|
(\fBsetpgid\fP(), \fBsetpgrp\fP()).
|
2004-11-03 13:51:07 +00:00
|
|
|
.TP
|
|
|
|
.B EPERM
|
|
|
|
An attempt was made to move a process into a process group in a
|
|
|
|
different session, or to change the process
|
|
|
|
group ID of one of the children of the calling process and the
|
|
|
|
child was in a different session, or to change the process group ID of
|
|
|
|
a session leader
|
2005-10-19 08:35:30 +00:00
|
|
|
(\fBsetpgid\fP(), \fBsetpgrp\fP()).
|
2004-11-03 13:51:07 +00:00
|
|
|
.TP
|
|
|
|
.B ESRCH
|
|
|
|
For
|
2005-10-19 06:54:38 +00:00
|
|
|
.BR getpgid ():
|
2004-11-03 13:51:07 +00:00
|
|
|
.I pid
|
|
|
|
does not match any process.
|
|
|
|
For
|
2005-10-19 06:54:38 +00:00
|
|
|
.BR setpgid ():
|
2004-11-03 13:51:07 +00:00
|
|
|
.I pid
|
|
|
|
is not the current process and not a child of the current process.
|
|
|
|
.SH "CONFORMING TO"
|
|
|
|
The functions
|
2005-10-19 06:54:38 +00:00
|
|
|
.BR setpgid ()
|
2004-11-03 13:51:07 +00:00
|
|
|
and
|
2005-10-19 06:54:38 +00:00
|
|
|
.BR getpgrp ()
|
2004-11-03 13:51:07 +00:00
|
|
|
conform to POSIX.1.
|
|
|
|
The function
|
2005-10-19 06:54:38 +00:00
|
|
|
.BR setpgrp ()
|
2005-07-18 15:05:56 +00:00
|
|
|
is from 4.2BSD.
|
2004-11-03 13:51:07 +00:00
|
|
|
The function
|
2005-10-19 06:54:38 +00:00
|
|
|
.BR getpgid ()
|
2004-11-03 13:51:07 +00:00
|
|
|
conforms to SVr4.
|
|
|
|
.SH NOTES
|
|
|
|
POSIX took
|
2005-10-19 06:54:38 +00:00
|
|
|
.BR setpgid ()
|
2004-11-03 13:51:07 +00:00
|
|
|
from the BSD function
|
2005-10-19 06:54:38 +00:00
|
|
|
.BR setpgrp ().
|
2006-01-13 09:39:55 +00:00
|
|
|
Also System V has a function with the same name, but it is identical to
|
2004-11-03 13:51:07 +00:00
|
|
|
.BR setsid (2).
|
|
|
|
.LP
|
|
|
|
To get the prototypes under glibc, define both _XOPEN_SOURCE and
|
|
|
|
_XOPEN_SOURCE_EXTENDED, or use "#define _XOPEN_SOURCE \fIn\fP"
|
|
|
|
for some integer \fIn\fP larger than or equal to 500.
|
|
|
|
.SH "SEE ALSO"
|
|
|
|
.BR getuid (2),
|
|
|
|
.BR setsid (2),
|
|
|
|
.BR tcgetpgrp (3),
|
|
|
|
.BR tcsetpgrp (3),
|
|
|
|
.BR termios (3)
|