kill(2) — Linux manual page

NAME | LIBRARY | SYNOPSIS | DESCRIPTION | RETURN VALUE | ERRORS | STANDARDS | HISTORY | NOTES | BUGS | SEE ALSO | COLOPHON

 kill(2)                    System Calls Manual                    kill(2) 

NAME         top

        kill - send signal to a process 

LIBRARY         top

        Standard C library (libc, -lc) 

SYNOPSIS         top

        #include <signal.h>         int kill(pid_t pid, int sig);     Feature Test Macro Requirements for glibc (see    feature_test_macros(7)):         kill():            _POSIX_C_SOURCE 

DESCRIPTION         top

        The kill() system call can be used to send any signal to any        process group or process.         If pid is positive, then signal sig is sent to the process with        the ID specified by pid.         If pid equals 0, then sig is sent to every process in the process        group of the calling process.         If pid equals -1, then sig is sent to every process for which the        calling process has permission to send signals, except for process        1 (init), but see below.         If pid is less than -1, then sig is sent to every process in the        process group whose ID is -pid.         If sig 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 CAP_KILL capability in the        user namespace of the target process), 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 processes belong to the        same session.  (Historically, the rules were different; see        HISTORY.) 

RETURN VALUE         top

        On success, zero is returned.  If signals were sent to a process        group, success means that at least one signal was delivered.  On        error, -1 is returned, and errno is set to indicate the error. 

ERRORS         top

        EINVAL An invalid signal was specified.         EPERM  The calling process does not have permission to send the               signal to any of the target processes.         ESRCH  The target process or process group does not exist.  Note               that an existing process might be a zombie, a process that               has terminated execution, but has not yet been wait(2)ed               for. 

STANDARDS         top

        POSIX.1-2008. 

HISTORY         top

        POSIX.1-2001, SVr4, 4.3BSD.     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 Linux 1.0 to 1.2.2, a signal        could be sent if the 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 Linux 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 target.        The current rules, which conform to POSIX.1, were adopted in Linux        1.3.78. 

NOTES         top

        The only signals that can be sent to process ID 1, the init        process, are those for which init has explicitly installed signal        handlers.  This is done to assure the system is not brought down        accidentally.         POSIX.1 requires that kill(-1,sig) send sig 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 kill(-1,sig) does not        signal the calling process.         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 sigwait(3), at        least one unblocked signal must be delivered to the sending thread        before the kill() returns. 

BUGS         top

        In Linux 2.6 up to and including Linux 2.6.7, there was a bug that        meant that when sending signals to a process group, kill() failed        with the error EPERM if the caller did not have permission to send        the signal to any (rather than all) 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. 

SEE ALSO         top

        kill(1), _exit(2), pidfd_send_signal(2), signal(2), tkill(2),        exit(3), killpg(3), sigqueue(3), capabilities(7), credentials(7),        signal(7) 

COLOPHON         top

        This page is part of the man-pages (Linux kernel and C library        user-space interface documentation) project.  Information about        the project can be found at         ⟨https://www.kernel.org/doc/man-pages/⟩.  If you have a bug report        for this manual page, see        ⟨https://git.kernel.org/pub/scm/docs/man-pages/man-pages.git/tree/CONTRIBUTING⟩.        This page was obtained from the tarball man-pages-6.15.tar.gz        fetched from        ⟨https://mirrors.edge.kernel.org/pub/linux/docs/man-pages/⟩ on        2025-08-11.  If you discover any rendering problems in this HTML        version of the page, or you believe there is a better or more up-        to-date source for the page, or you have corrections or        improvements to the information in this COLOPHON (which is not        part of the original manual page), send a mail to        [email protected]  Linux man-pages 6.15            2025-05-17                        kill(2) 

Pages that refer to this page: capsh(1)fuser(1)kill(1@@coreutils)kill(1)kill(1@@procps-ng)killall(1)pgrep(1)skill(1)strace(1)clone(2)_exit(2)F_GETSIG(2const)getpid(2)getrlimit(2)pause(2)pidfd_open(2)pidfd_send_signal(2)ptrace(2)rt_sigqueueinfo(2)setfsgid(2)setfsuid(2)sigaction(2)signal(2)sigpending(2)sigprocmask(2)sigreturn(2)sigsuspend(2)sigwaitinfo(2)syscalls(2)tkill(2)wait(2)gsignal(3)id_t(3type)killpg(3)psignal(3)pthread_kill(3)raise(3)sd_event_add_child(3)sigpause(3)sigqueue(3)sigset(3)sigvec(3)systemd.exec(5)systemd.kill(5)capabilities(7)cpuset(7)credentials(7)pid_namespaces(7)pthreads(7)signal(7)signal-safety(7)systemd-coredump(8)