KILL(2) | System Calls Manual | KILL(2) |
kill
— send signal
to a process
#include
<signal.h>
int
kill
(pid_t
pid, int sig);
The
kill
()
function sends the signal given by sig to
pid, a process or a group of processes.
sig may be one of the signals specified in
sigaction(2) or it may be
0, in which case error checking is performed but no signal is actually sent.
This can be used to check the validity of pid.
For a process to have permission to send a signal to a process
designated by pid, the real or effective user ID of
the receiving process must match that of the sending process or the user
must have appropriate privileges (such as given by a set-user-ID program or
the user is the superuser). A single exception is the signal
SIGCONT
, which may always be sent to any process
with the same session ID as the caller.
If the value of pid causes
sig to be sent to the calling process, either
sig or at least one pending unblocked signal will be
delivered before
kill
()
returns unless sig is blocked in the calling thread,
sig is unblocked in another thread, or another thread
is waiting for sig in
sigwait
().
Setuid and setgid processes are dealt with slightly differently.
For the non-root user, to prevent attacks against such processes, some
signal deliveries are not permitted and return the error
EPERM
. The following signals are allowed through to
this class of processes: SIGKILL
,
SIGINT
, SIGTERM
,
SIGSTOP
, SIGTTIN
,
SIGTTOU
, SIGTSTP
,
SIGHUP
, SIGUSR1
,
SIGUSR2
.
Upon successful completion, the value 0 is returned; otherwise the value -1 is returned and the global variable errno is set to indicate the error.
kill
() will fail and no signal will be
sent if:
EINVAL
]ESRCH
]EPERM
]The kill
() function conforms to
IEEE Std 1003.1-2008 (“POSIX.1”).
The kill
() system call first appeared in
Version 2 AT&T UNIX. The
sig argument was introduced in
Version 4 AT&T UNIX.
February 8, 2020 | OpenBSD-6.7 |