]> git.ipfire.org Git - thirdparty/man-pages.git/blobdiff - man2/kill.2
kill.2: Clarify the meaning if sig==0
[thirdparty/man-pages.git] / man2 / kill.2
index 545cc85c166a1742ceef80883b6395847d88f95b..acd53fe47a188af7a0182f738b6ac113e65ab6a1 100644 (file)
@@ -1,7 +1,6 @@
-.\" Hey Emacs! This file is -*- nroff -*- source.
-.\"
 .\" Copyright (c) 1992 Drew Eckhardt (drew@cs.colorado.edu), March 28, 1992
 .\"
+.\" %%%LICENSE_START(VERBATIM)
 .\" Permission is granted to make and distribute verbatim copies of this
 .\" manual provided the copyright notice and this permission notice are
 .\" preserved on all copies.
@@ -21,6 +20,7 @@
 .\"
 .\" Formatted or processed versions of this manual, if unaccompanied by
 .\" the source, must acknowledge the copyright and authors of this work.
+.\" %%%LICENSE_END
 .\"
 .\" Modified by Michael Haardt <michael@moria.de>
 .\" Modified by Thomas Koenig <ig25@rz.uni-karlsruhe.de>
 .\" Modified 1996-07-21 by Andries Brouwer <aeb@cwi.nl>
 .\" Modified 1997-01-17 by Andries Brouwer <aeb@cwi.nl>
 .\" Modified 2001-12-18 by Andries Brouwer <aeb@cwi.nl>
-.\" Modified 2002-07-24 by Michael Kerrisk <mtk-manpages@gmx.net>
+.\" Modified 2002-07-24 by Michael Kerrisk <mtk.manpages@gmail.com>
 .\"    Added note on historical rules enforced when an unprivileged process
 .\"    sends a signal.
-.\" Modified 2004-06-16 by Michael Kerrisk <mtk-manpages@gmx.net>
+.\" Modified 2004-06-16 by Michael Kerrisk <mtk.manpages@gmail.com>
 .\"     Added note on CAP_KILL
 .\" Modified 2004-06-24 by aeb
 .\" Modified, 2004-11-30, after idea from emmanuel.colbus@ensimag.imag.fr
 .\"
-.TH KILL 2 2004-06-24 "Linux 2.6.7" "Linux Programmer's Manual"
+.TH KILL 2 2016-03-15 "Linux" "Linux Programmer's Manual"
 .SH NAME
 kill \- send signal to a process
 .SH SYNOPSIS
@@ -52,26 +52,39 @@ kill \- send signal to a process
 .sp
 .BI "int kill(pid_t " pid ", int " sig );
 .fi
+.sp
+.in -4n
+Feature Test Macro Requirements for glibc (see
+.BR feature_test_macros (7)):
+.in
+.sp
+.ad l
+.BR kill ():
+_POSIX_C_SOURCE
+.ad b
 .SH DESCRIPTION
 The
 .BR kill ()
 system call
 can be used to send any signal to any process group or process.
 .PP
-If \fIpid\fP is positive, then signal \fIsig\fP is sent to \fIpid\fP.
+If \fIpid\fP is positive, then signal \fIsig\fP is sent to the
+process with the ID specified by \fIpid\fP.
 .PP
 If \fIpid\fP equals 0, then \fIsig\fP is sent to every process in the
-process group of the current process.
+process group of the calling process.
 .PP
 If \fIpid\fP equals \-1, then \fIsig\fP is sent to every process
 for which the calling process has permission to send signals,
-except for process 1 (init), but see below.
+except for process 1 (\fIinit\fP), but see below.
 .PP
 If \fIpid\fP is less than \-1, then \fIsig\fP is sent to every process
-in the process group \fI\-pid\fP.
+in the process group whose ID is \fI\-pid\fP.
 .PP
-If \fIsig\fP is 0, then no signal is sent, but error checking is still
-performed.
+If \fIsig\fP is 0, then no signal is sent,
+but existence and permission checks are still performed;
+this can be used to check for the existence of a process ID or
+process group ID that the caller is permitted to signal.
 
 For a process to have permission to send a signal
 it must either be privileged (under Linux: have the
@@ -79,9 +92,12 @@ it must either be privileged (under Linux: have the
 capability), or the real or effective
 user ID of the sending process must equal the real or
 saved set-user-ID of the target process.
-In the case of SIGCONT it suffices when the sending and receiving
+In the case of
+.B SIGCONT
+it suffices when the sending and receiving
 processes belong to the same session.
-.SH "RETURN VALUE"
+(Historically, the rules were different; see NOTES.)
+.SH RETURN VALUE
 On success (at least one signal was sent), zero is returned.
 On error, \-1 is returned, and
 .I errno
@@ -102,8 +118,10 @@ a process which already committed termination, but
 has not yet been
 .BR wait (2)ed
 for.
+.SH CONFORMING TO
+POSIX.1-2001, POSIX.1-2008, SVr4, 4.3BSD.
 .SH NOTES
-The only signals that can be sent process ID 1, the
+The only signals that can be sent to process ID 1, the
 .I init
 process, are those for which
 .I init
@@ -111,50 +129,52 @@ has explicitly installed signal handlers.
 This is done to assure the
 system is not brought down accidentally.
 .LP
-POSIX.1-2001 requires that \fIkill(\-1,sig)\fP send \fIsig\fP
-to all processes that the current process may send signals to,
+POSIX.1 requires that \fIkill(\-1,sig)\fP send \fIsig\fP
+to all processes that the calling process may send signals to,
 except possibly for some implementation-defined system processes.
 Linux allows a process to signal itself, but on Linux the call
-\fIkill(\-1,sig)\fP does not signal the current process.
+\fIkill(\-1,sig)\fP does not signal the calling process.
 .LP
-POSIX.1-2001 requires that if a process sends a signal to itself,
+POSIX.1 requires that if a process sends a signal to itself,
 and the sending thread does not have the signal blocked,
 and no other thread
-has it unblocked or is waiting for it in \fIsigwait\fP(3), at least one
+has it unblocked or is waiting for it in
+.BR sigwait (3),
+at least one
 unblocked signal must be delivered to the sending thread before the
-\fIkill\fP().
-.SH BUGS
-In 2.6 kernels up to and including 2.6.7,
-there was a bug that meant that when sending signals to a process group,
 .BR kill ()
-failed with the error
-.B EPERM
-if the caller did have permission to send the signal to \fIany\fP (rather
-than \fIall\fP) of the members of the process group.
-Notwithstanding this error return, the signal was still delivered
-to all of the processes for which the caller had permission to signal.
-.SH "LINUX HISTORY"
+returns.
+.SS Linux notes
 Across different kernel versions, Linux has enforced different rules
 for the permissions required for an unprivileged process
 to send a signal to another process.
 .\" In the 0.* kernels things chopped and changed quite
 .\" a bit - MTK, 24 Jul 02
 In kernels 1.0 to 1.2.2, a signal could be sent if the
-effective user ID of the sender matched that of the receiver,
-or the real user ID of the sender matched that of the receiver.
+effective user ID of the sender matched effective user ID of the target,
+or the real user ID of the sender matched the real user ID of the target.
 From kernel 1.2.3 until 1.3.77, a signal could be sent if the
 effective user ID of the sender matched either the real or effective
-user ID of the receiver.
-The current rules, which conform to POSIX.1-2001, were adopted
+user ID of the target.
+The current rules, which conform to POSIX.1, were adopted
 in kernel 1.3.78.
-.SH "CONFORMING TO"
-SVr4, 4.3BSD, POSIX.1-2001
-.SH "SEE ALSO"
+.SH BUGS
+In 2.6 kernels up to and including 2.6.7,
+there was a bug that meant that when sending signals to a process group,
+.BR kill ()
+failed with the error
+.B EPERM
+if the caller did not have permission to send the signal to \fIany\fP (rather
+than \fIall\fP) of the members of the process group.
+Notwithstanding this error return, the signal was still delivered
+to all of the processes for which the caller had permission to signal.
+.SH SEE ALSO
 .BR _exit (2),
 .BR killpg (2),
 .BR signal (2),
-.BR sigqueue (2),
 .BR tkill (2),
 .BR exit (3),
+.BR sigqueue (3),
 .BR capabilities (7),
+.BR credentials (7),
 .BR signal (7)