kill(2)

Från Wiki.linux.se
Hoppa till navigering Hoppa till sök

kill(2)

NAMN

kill – skicka signal till en process

BIBLIOTEK

Standard C-biblioteket (libc, -lc)

SYNTAX

#include <signal.h>

int kill(pid_t pid, int sig);
Krav på feature test-makron (glibc) – se feature_test_macros(7)
kill(): _POSIX_C_SOURCE

BESKRIVNING

Systemanropet kill() kan användas för att skicka valfri signal till en processgrupp eller en enskild process.

Om pid är positivt skickas signalen sig till processen med det angivna process-ID:t.

Om pid är 0 skickas sig till alla processer i den anropande processens processgrupp.

Om pid är -1 skickas sig till alla processer som den anropande processen har rätt att signalera, utom process 1 (init), se dock nedan.

Om pid är mindre än -1 skickas sig till alla processer i den processgrupp vars ID är -pid.

Om sig är 0 skickas ingen signal, men existens- och behörighetskontroller utförs ändå; detta kan användas för att kontrollera existensen av ett process-ID eller processgrupps-ID som anroparen har rätt att signalera.

För att en process ska få skicka en signal måste den antingen vara privilegierad (under Linux: ha förmågan CAP_KILL i målprocessens användarrymd) eller så måste avsändarprocessens verkliga eller effektiva användar-ID vara lika med målprocessens verkliga eller sparade set-user-ID. För SIGCONT räcker det att avsändande och mottagande processer tillhör samma session. (Historiskt har reglerna varit annorlunda; se HISTORIK.)

RETURVÄRDE

Vid framgång returneras 0. Om signaler skickades till en processgrupp betyder framgång att minst en signal levererades. Vid fel returneras -1 och errno sätts för att indikera felet.

FEL

EINVAL – Ogiltig signal angavs. EPERM – Den anropande processen saknar rätt att skicka signalen till någon av målprocesserna. ESRCH – Målprocessen eller processgruppen finns inte. Observera att en existerande process kan vara en zombie (terminerad men ännu inte wait(2)-ad).

STANDARDER

POSIX.1-2008.

HISTORIK

POSIX.1-2001, SVr4, 4.3BSD.

Linux-anteckningar
Mellan olika kärnversioner har Linux haft olika regler för rättigheter för en icke-privilegierad process att skicka signaler.
I Linux 1.0–1.2.2 krävdes att avsändarens effektiva UID matchade målets effektiva UID, eller avsändarens verkliga UID matchade målets verkliga UID.
I Linux 1.2.3–1.3.77 krävdes att avsändarens effektiva UID matchade målets verkliga eller effektiva UID.
Nuvarande regler, som följer POSIX.1, infördes i Linux 1.3.78.

ANMÄRKNINGAR

De enda signaler som kan skickas till process-ID 1 (init) är sådana som init uttryckligen har installerat signalhanterare för. Detta för att förhindra att systemet oavsiktligt tas ned.

POSIX.1 kräver att kill(-1, sig) skickar sig till alla processer som anroparen får signalera, med undantag för eventuella implementeringsdefinierade systemprocesser. Linux tillåter en process att signalera sig själv, men på Linux signalerar anropet kill(-1, sig) inte den anropande processen.

POSIX.1 kräver att om en process skickar en signal till sig själv, och den sändande tråden inte har blockerat signalen och ingen annan tråd har den oblockerad eller väntar på den via sigwait(3), så måste åtminstone en oblockerad signal levereras till den sändande tråden innan kill() returnerar.

BUGGAR

I Linux 2.6 upp till och med 2.6.7 fanns en bugg som innebar att när signaler skickades till en processgrupp misslyckades kill() med felet EPERM om anroparen saknade rätt att skicka signalen till någon (i stället för alla) av gruppens medlemmar. Trots felreturen levererades signalen ändå till alla processer som anroparen hade rätt att signalera.

SE ÄVEN

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

COLOPHON

Denna sida är en del av projektet man-pages (dokumentation av användarrymden för Linuxkärnan och C-biblioteket). Projektinformation: <https://www.kernel.org/doc/man-pages/> Buggrapporter för denna manualsida: <https://git.kernel.org/pub/scm/docs/man-pages/man-pages.git/tree/CONTRIBUTING>

Sidan hämtades från tar-arkivet man-pages-6.15.tar.gz från <https://mirrors.edge.kernel.org/pub/linux/docs/man-pages/> den 11 augusti 2025.

Sidslut

Orginalhemsidan på Engelska :https://man7.org/linux/man-pages/man2/kill.2.html Det här är en maskinöversättning av Linux man sidor till svenska. Om du hittar fel är vi tacksamma om du rapporterar dem via formuläret som finns på https://www.linux.se/kontaka-linux-se/

Tack till Datorhjälp som har sponsrat Linux.se med webbhotell.