diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-15 19:43:11 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-15 19:43:11 +0000 |
commit | fc22b3d6507c6745911b9dfcc68f1e665ae13dbc (patch) | |
tree | ce1e3bce06471410239a6f41282e328770aa404a /upstream/archlinux/man3p/setpgid.3p | |
parent | Initial commit. (diff) | |
download | manpages-l10n-fc22b3d6507c6745911b9dfcc68f1e665ae13dbc.tar.xz manpages-l10n-fc22b3d6507c6745911b9dfcc68f1e665ae13dbc.zip |
Adding upstream version 4.22.0.upstream/4.22.0
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'upstream/archlinux/man3p/setpgid.3p')
-rw-r--r-- | upstream/archlinux/man3p/setpgid.3p | 203 |
1 files changed, 203 insertions, 0 deletions
diff --git a/upstream/archlinux/man3p/setpgid.3p b/upstream/archlinux/man3p/setpgid.3p new file mode 100644 index 00000000..24e7a178 --- /dev/null +++ b/upstream/archlinux/man3p/setpgid.3p @@ -0,0 +1,203 @@ +'\" et +.TH SETPGID "3P" 2017 "IEEE/The Open Group" "POSIX Programmer's Manual" +.\" +.SH PROLOG +This manual page is part of the POSIX Programmer's Manual. +The Linux implementation of this interface may differ (consult +the corresponding Linux manual page for details of Linux behavior), +or the interface may not be implemented on Linux. +.\" +.SH NAME +setpgid +\(em set process group ID for job control +.SH SYNOPSIS +.LP +.nf +#include <unistd.h> +.P +int setpgid(pid_t \fIpid\fP, pid_t \fIpgid\fP); +.fi +.SH DESCRIPTION +The +\fIsetpgid\fR() +function shall either join an existing process group or create a +new process group within the session of the calling process. +.P +The process group ID of a session leader shall not change. +.P +Upon successful completion, the process group ID of the process with +a process ID that matches +.IR pid +shall be set to +.IR pgid . +.P +As a special case, if +.IR pid +is 0, the process ID of the calling process shall be used. Also, if +.IR pgid +is 0, the process ID of the indicated process shall be used. +.SH "RETURN VALUE" +Upon successful completion, +\fIsetpgid\fR() +shall return 0; otherwise, \-1 shall be returned and +.IR errno +shall be set to indicate the error. +.SH ERRORS +The +\fIsetpgid\fR() +function shall fail if: +.TP +.BR EACCES +The value of the +.IR pid +argument matches the process ID of a child process of the calling +process and the child process has successfully executed one of the +.IR exec +functions. +.TP +.BR EINVAL +The value of the +.IR pgid +argument is less than 0, or is not a value supported by the +implementation. +.TP +.BR EPERM +The process indicated by the +.IR pid +argument is a session leader. +.TP +.BR EPERM +The value of the +.IR pid +argument matches the process ID of a child process of the calling +process and the child process is not in the same session as the calling +process. +.TP +.BR EPERM +The value of the +.IR pgid +argument is valid but does not match the process ID of the process +indicated by the +.IR pid +argument and there is no process with a process group ID that matches +the value of the +.IR pgid +argument in the same session as the calling process. +.TP +.BR ESRCH +The value of the +.IR pid +argument does not match the process ID of the calling process or of a +child process of the calling process. +.LP +.IR "The following sections are informative." +.SH EXAMPLES +None. +.SH "APPLICATION USAGE" +None. +.SH RATIONALE +The +\fIsetpgid\fR() +function shall group processes together for the purpose of +signaling, placement in foreground or background, +and other job control actions. +.P +The +\fIsetpgid\fR() +function is similar to the +\fIsetpgrp\fR() +function of 4.2 BSD, except that 4.2 BSD allowed the specified new process +group to assume any value. This presents certain security problems and +is more +flexible than necessary to support job control. +.P +To provide tighter security, +\fIsetpgid\fR() +only allows the calling process to join a process group already in use +inside its session or create a new process group +whose process group ID was equal to its process ID. +.P +When a job control shell spawns a new job, the processes in the +job must be placed into a new process group via +\fIsetpgid\fR(). +There are two timing constraints involved in this action: +.IP " 1." 4 +The new process must be placed in the new process group before the +appropriate program is launched via one of the +.IR exec +functions. +.IP " 2." 4 +The new process must be placed in the new process group before the +shell can correctly send signals to the new process group. +.P +To address these constraints, the following actions are performed. The +new processes call +\fIsetpgid\fR() +to alter their own process groups after +\fIfork\fR() +but before +.IR exec . +This satisfies the first constraint. Under 4.3 BSD, the second +constraint is satisfied by the synchronization property of +.IR vfork (\|); +that is, the shell is suspended until the child has completed the +.IR exec , +thus ensuring that the child has completed the +\fIsetpgid\fR(). +A new version of +\fIfork\fR() +with this same synchronization property was considered, but it was +decided instead to merely allow the parent shell process to adjust the +process group of its child processes via +\fIsetpgid\fR(). +Both timing constraints are now satisfied by having both the parent +shell and the child attempt to adjust the process group of the child +process; it does not matter which succeeds first. +.P +Since it would be confusing to an application to have its process +group change after it began executing (that is, after +.IR exec ), +and because the child process would already have adjusted its process +group before this, the +.BR [EACCES] +error was added to disallow this. +.P +One non-obvious use of +\fIsetpgid\fR() +is to allow a job control shell to return itself to its original +process group (the one in effect when the job control shell was +executed). A job control shell does this before returning control back +to its parent when it is terminating or suspending itself as a way of +restoring its job control ``state'' back to what its parent would +expect. (Note that the original process group of the job control shell +typically matches the process group of its parent, but this is not +necessarily always the case.) +.SH "FUTURE DIRECTIONS" +None. +.SH "SEE ALSO" +.IR "\fIexec\fR\^", +.IR "\fIgetpgrp\fR\^(\|)", +.IR "\fIsetsid\fR\^(\|)", +.IR "\fItcsetpgrp\fR\^(\|)" +.P +The Base Definitions volume of POSIX.1\(hy2017, +.IR "\fB<sys_types.h>\fP", +.IR "\fB<unistd.h>\fP" +.\" +.SH COPYRIGHT +Portions of this text are reprinted and reproduced in electronic form +from IEEE Std 1003.1-2017, Standard for Information Technology +-- Portable Operating System Interface (POSIX), The Open Group Base +Specifications Issue 7, 2018 Edition, +Copyright (C) 2018 by the Institute of +Electrical and Electronics Engineers, Inc and The Open Group. +In the event of any discrepancy between this version and the original IEEE and +The Open Group Standard, the original IEEE and The Open Group Standard +is the referee document. The original Standard can be obtained online at +http://www.opengroup.org/unix/online.html . +.PP +Any typographical or formatting errors that appear +in this page are most likely +to have been introduced during the conversion of the source files to +man page format. To report such errors, see +https://www.kernel.org/doc/man-pages/reporting_bugs.html . |