summaryrefslogtreecommitdiffstats
path: root/upstream/archlinux/man3p/kill.3p
diff options
context:
space:
mode:
Diffstat (limited to 'upstream/archlinux/man3p/kill.3p')
-rw-r--r--upstream/archlinux/man3p/kill.3p290
1 files changed, 290 insertions, 0 deletions
diff --git a/upstream/archlinux/man3p/kill.3p b/upstream/archlinux/man3p/kill.3p
new file mode 100644
index 00000000..8d64a257
--- /dev/null
+++ b/upstream/archlinux/man3p/kill.3p
@@ -0,0 +1,290 @@
+'\" et
+.TH KILL "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
+kill
+\(em send a signal to a process or a group of processes
+.SH SYNOPSIS
+.LP
+.nf
+#include <signal.h>
+.P
+int kill(pid_t \fIpid\fP, int \fIsig\fP);
+.fi
+.SH DESCRIPTION
+The
+\fIkill\fR()
+function shall send a signal to a process or a group of processes
+specified by
+.IR pid .
+The signal to be sent is specified by
+.IR sig
+and is either one from the list given in
+.IR <signal.h>
+or 0. If
+.IR sig
+is 0 (the null signal), error checking is performed but no signal is
+actually sent. The null signal can be used to check the validity of
+.IR pid .
+.P
+For a process to have permission to send a signal to a process
+designated by
+.IR pid ,
+unless the sending process has appropriate privileges, the real or
+effective user ID of the sending process shall match the real or saved
+set-user-ID of the receiving process.
+.P
+If
+.IR pid
+is greater than 0,
+.IR sig
+shall be sent to the process whose process ID is equal to
+.IR pid .
+.P
+If
+.IR pid
+is 0,
+.IR sig
+shall be sent to all processes (excluding an unspecified set of system
+processes) whose process group ID is equal to the process group ID of
+the sender, and for which the process has permission to send a signal.
+.P
+If
+.IR pid
+is \-1,
+.IR sig
+shall be sent to all processes (excluding an unspecified set of system
+processes) for which the process has permission to send that signal.
+.P
+If
+.IR pid
+is negative, but not \-1,
+.IR sig
+shall be sent to all processes (excluding an unspecified set of system
+processes) whose process group ID is equal to the absolute value of
+.IR pid ,
+and for which the process has permission to send a signal.
+.P
+If the value of
+.IR pid
+causes
+.IR sig
+to be generated for the sending process, and if
+.IR sig
+is not blocked for the calling thread and if no other thread has
+.IR sig
+unblocked or is waiting in a
+\fIsigwait\fR()
+function for
+.IR sig ,
+either
+.IR sig
+or at least one pending unblocked signal shall be delivered to the
+sending thread before
+\fIkill\fR()
+returns.
+.P
+The user ID tests described above shall not be applied when sending
+SIGCONT to a process that is a member of the same session as the
+sending process.
+.P
+An implementation that provides extended security controls may impose
+further implementation-defined restrictions on the sending of
+signals, including the null signal. In particular, the system may deny
+the existence of some or all of the processes specified by
+.IR pid .
+.P
+The
+\fIkill\fR()
+function is successful if the process has permission to send
+.IR sig
+to any of the processes specified by
+.IR pid .
+If
+\fIkill\fR()
+fails, no signal shall be sent.
+.SH "RETURN VALUE"
+Upon successful completion, 0 shall be returned. Otherwise, \-1
+shall be returned and
+.IR errno
+set to indicate the error.
+.SH ERRORS
+The
+\fIkill\fR()
+function shall fail if:
+.TP
+.BR EINVAL
+The value of the
+.IR sig
+argument is an invalid or unsupported signal number.
+.TP
+.BR EPERM
+The process does not have permission to send the signal to any
+receiving process.
+.TP
+.BR ESRCH
+No process or process group can be found corresponding to that
+specified by
+.IR pid .
+.LP
+.IR "The following sections are informative."
+.SH EXAMPLES
+None.
+.SH "APPLICATION USAGE"
+None.
+.SH RATIONALE
+The semantics for permission checking for
+\fIkill\fR()
+differed between System V and most other implementations, such as
+Version 7 or
+4.3 BSD. The semantics chosen for this volume of POSIX.1\(hy2017 agree with System V.
+Specifically, a set-user-ID
+process cannot protect itself against signals (or at least not against
+SIGKILL)
+unless it changes its real user ID.
+This choice allows the user who starts an application to send it
+signals even if it changes its effective user ID.
+The other semantics give more power to an application that wants to
+protect itself from the user who ran it.
+.P
+Some implementations provide semantic extensions to the
+\fIkill\fR()
+function when the absolute value of
+.IR pid
+is greater than some maximum, or otherwise special, value. Negative
+values are a flag to
+\fIkill\fR().
+Since most implementations return
+.BR [ESRCH]
+in this case, this behavior is not included in this volume of POSIX.1\(hy2017, although
+a conforming implementation could provide such an extension.
+.P
+The unspecified processes to which a signal cannot be sent
+may include the scheduler or
+.IR init .
+.P
+There was initially strong sentiment to specify that, if
+.IR pid
+specifies that a signal be sent to the calling process and that signal
+is not blocked, that signal would be delivered before
+\fIkill\fR()
+returns. This would permit a process to call
+\fIkill\fR()
+and be guaranteed that the call never return. However, historical
+implementations that provide only the
+\fIsignal\fR()
+function make only the weaker guarantee in this volume of POSIX.1\(hy2017, because they
+only deliver one signal each time a process enters the kernel.
+Modifications to such implementations to support the
+\fIsigaction\fR()
+function generally require entry to the kernel following return from a
+signal-catching function, in order to restore the signal mask. Such
+modifications have the effect of satisfying the stronger requirement,
+at least when
+\fIsigaction\fR()
+is used, but not necessarily when
+\fIsignal\fR()
+is used. The standard developers considered making the
+stronger requirement except when
+\fIsignal\fR()
+is used, but felt this would be unnecessarily complex. Implementors
+are encouraged to meet the stronger requirement whenever possible. In
+practice, the weaker requirement is the same, except in the rare case
+when two signals arrive during a very short window. This reasoning
+also applies to a similar requirement for
+\fIsigprocmask\fR().
+.P
+In 4.2 BSD, the SIGCONT
+signal can be sent to any descendant process regardless of user-ID
+security checks.
+This allows a job control shell to continue a job even if processes in
+the
+job have altered their user IDs (as in the
+.IR su
+command). In keeping with the addition of the concept of sessions,
+similar functionality is provided by allowing the SIGCONT
+signal to be sent to any process in the same session regardless of user
+ID security checks. This is less restrictive than BSD in the sense
+that ancestor processes (in the same session) can now be the recipient.
+It is more restrictive than BSD in the sense that descendant processes
+that form new sessions are now subject to the user ID checks. A similar
+relaxation of security is not necessary for the other job control
+signals since those signals are typically sent by the terminal driver
+in recognition of special characters being typed; the terminal driver
+bypasses all security checks.
+.P
+In secure implementations, a process may be restricted
+from sending a signal to a process having a different security label.
+In order to prevent the existence or nonexistence of a process from
+being used as a covert channel,
+such processes should appear nonexistent to the sender; that is,
+.BR [ESRCH]
+should be returned, rather than
+.BR [EPERM] ,
+if
+.IR pid
+refers only to such processes.
+.P
+Historical implementations varied on the result of a
+\fIkill\fR()
+with
+.IR pid
+indicating a zombie process. Some indicated success on such a call
+(subject to permission checking), while others gave an error of
+.BR [ESRCH] .
+Since the definition of process lifetime in this volume of POSIX.1\(hy2017
+covers zombie processes, the
+.BR [ESRCH]
+error as described is inappropriate in this case and implementations
+that give this error do not conform. This means that an application
+cannot have a parent process check for termination of a particular
+child by sending it the null signal with
+\fIkill\fR(),
+but must instead use
+\fIwaitpid\fR()
+or
+\fIwaitid\fR().
+.P
+There is some belief that the name
+\fIkill\fR()
+is misleading, since the function is not always intended to cause
+process termination. However, the name is common to all historical
+implementations, and any change would be in conflict with the goal of
+minimal changes to existing application code.
+.SH "FUTURE DIRECTIONS"
+None.
+.SH "SEE ALSO"
+.IR "\fIgetpid\fR\^(\|)",
+.IR "\fIraise\fR\^(\|)",
+.IR "\fIsetsid\fR\^(\|)",
+.IR "\fIsigaction\fR\^(\|)",
+.IR "\fIsigqueue\fR\^(\|)",
+.IR "\fIwait\fR\^(\|)"
+.P
+The Base Definitions volume of POSIX.1\(hy2017,
+.IR "\fB<signal.h>\fP",
+.IR "\fB<sys_types.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 .