Your Browser is not longer supported

Please use Google Chrome, Mozilla Firefox or Microsoft Edge to view the page correctly
Loading...

{{viewport.spaceProperty.prod}}

kill - Signal an Prozess oder Prozessgruppe senden

&pagelevel(4)&pagelevel

Definition

#include <signal.h>

Optional
#include <sys/types.h> (Ende)

int kill(pid_t pid, int sig);

Beschreibung

Wenn die Funktion mit POSIX-Funktionalität aufgerufen wird, verhält sie sich XPG5-konform, wie folgt:

  • kill() sendet ein Signal sig an den Prozess oder die Prozessgruppe, der bzw. die durch pid angegeben wird. sig ist entweder eines der in der Datei signal.h angegebenen Signale oder gleich 0. Wenn sig gleich 0 ist (Nullsignal), wird eine Fehlerüberprüfung durchgeführt, ohne dass ein Signal gesendet wird. Das Nullsignal kann verwendet werden, um die Gültigkeit von pid zu überprüfen.

  • {_POSIX_SAVED_IDS} ist auf allen X/Open-konformen Systemen definiert. Damit ein Prozess ein Signal an den durch pid bezeichneten Prozess senden kann, muss die reale oder effektive Benutzernummer des sendenden Prozesses mit der realen oder gesicherten Benutzernummer des empfangenden Prozesses übereinstimmen, vorausgesetzt der sendende Prozess hat geeignete Zugriffsrechte.

  • Wenn pid größer als 0 ist, wird sig an den Prozess gesendet, dessen Prozessnummer gleich pid ist.

  • Wenn pid gleich 0 ist, wird sig an alle Prozesse (außer einer Anzahl von Systemprozessen) gesendet, deren Prozessgruppennummer gleich der Prozessgruppennummer des Senders ist und für die der Prozess die Erlaubnis hat, ein Signal zu senden.

  • Wenn pid gleich -1 ist, wird sig an alle Prozesse gesendet, für die der Prozess die Erlaubnis hat, ein Signal zu senden, außer den Systemprozessen.

  • Wenn pid negativ, aber ungleich -1 ist, wird sig an alle Prozesse gesendet, deren Prozessgruppenummer gleich dem Absolutbetrag von pid ist, und für die der Prozess die Erlaubnis hat, ein Signal zu senden.

  • Wenn durch den Wert von pid für den sendenden Prozess sig generiert wird und wenn sig nicht blockiert ist, wird, bevor kill() zurückkehrt, entweder sig oder zumindest ein anstehendes, nicht blockiertes Signal an den sendenden Prozess zugestellt.

  • Die Benutzernummer wird nicht überprüft, wenn das Signal SIGCONT an einen Prozess gesendet wird, der Mitglied derselben Sitzung ist, wie der sendende Prozess.

  • kill() ist erfolgreich, wenn der Prozess die Erlaubnis hat, sig an einen der durch pid angegebenen Prozesse zu senden. Wenn kill() fehlschlägt, wird kein Signal gesendet.

Werden Threads verwendet, so wirkt sich die Funktion auf den Prozess oder auf einen Thread wie folgt aust:

  • Senden eines Signals an einen Prozess oder eine Prozessgruppe; Für den (Spezial-)Fall, dass der Wert von pid bewirkt, dass sig für den sendenden Prozess generiert wird, gilt: Wenn das Signal für den aufrufenden Thread nicht blockiert ist und wenn alle anderen Threads des Prozesses das Signal blockieren bzw. nicht in einer sigwait()-Funktion auf das Signal warten, wird entweder sig oder wenigstens ein anhängiges nicht blockiertes Signal dem sendenden Thread zugestellt, bevor kill() zurückkehrt.

  • BS2000
    Wenn die Funktion mit BS2000-Funktionalität aufgerufen wird, verhält sie sich abweichend, wie folgt:

  • pid muss gleich 0 sein. Dadurch wird das Signal an den aufrufenden Prozess gesendet.

  • Für sig kann folgende Untermenge der Signale, die in signal.h definiert sind, eingesetzt werden:

    Signal

    STXIT-Klasse

    Bedeutung

    SIGHUP

    ABEND

    Abbruch der Dialogstationsleitung

    SIGINT

    ESCPBRK

    Unterbrechung von der Dialogstation mit [K2]

    SIGILL

    PROCHK

    Ausführung einer ungültigen Instruktion

    SIGABRT

    -

    raise-Signal für Programmbeendigung mit _exit(-1)

    SIGFPE

    PROCHK

    fehlerhafte Gleitpunktoperation

    SIGKILL

    -

    raise-Signal für Programmbeendigung mit exit(-1)

    SIGSEGV

    ERROR

    Speicherzugriff mit unerlaubtem Segmentzugriff

    SIGALRM

    RTIMER

    ein Zeitintervall ist abgelaufen (Realzeit)

    SIGTERM

    TERM

    Signal bei Programmbeendigung

    SIGUSR1

    -

    vom Benutzer definiert

    SIGUSR2

    -

    vom Benutzer definiert

    SIGDVZ

    PROCHK

    Division durch 0

    SIGXCPU

    RUNOUT

    CPU-Zeit ist aufgebraucht

    SIGTIM

    TIMER

    ein Zeit-Intervall ist abgelaufen (CPU-Zeit)

    SIGINTR

    INTR

    SEND-MESSAGE-Kommando

    (Ende)

Returnwert

0

bei erfolgreicher Beendigung.

 

-1

bei Fehler. errno wird gesetzt, um den Fehler anzuzeigen.

Fehler

kill() schlägt fehl, wenn gilt:

 

EINVAL

Der Wert des Arguments sig ist eine ungültige oder nicht unterstützte Signalnummer.

 

EPERM

Der Prozess besitzt keine Erlaubnis, das Signal an einen empfangenden Prozess zu senden.

BS2000
EPERM wird nicht unterstützt. (Ende)

 

ESRCH

Es kann kein Prozess oder keine Prozessgruppe gefunden werden, die der durch pid angegebenen entspricht.

Siehe auch

getpid(), raise(), setsid(), sigaction(), signal.h, sys/types.h.