ein Kapitel zurück                                           ein Kapitel weiter

Der Syntax von raise().....

#include <signal.h>

int raise(int sig);  

Sendet ein Software-Signal zum ausführenden Programm. Mit der Funktion raise lassen sich Software-Signale vom Typ sig an das Programm senden. Wenn das Programm einen Signal-Handler für den durch sig angegebenen Signaltyp installiert hat, wird diese Routine ausgeführt. Wenn kein Handler installiert ist, wird die Standardaktion (SIG_DFL) für den jeweiligen Signaltyp ausgeführt. Als einfaches Beispiel wollen wir ein Programm schreiben das uns nach 2 Zahlen abfragt zum dividieren. Wenn der Divisor 0 ist wollen wir an unser Programm das Signal SIGFPE (siehe die Kapitel zuvor) senden um das Programm zu beenden....

/*Download:raise.c*/
#include <stdio.h> #include <signal.h> int main() { int a,b; printf("Zahl1 : "); scanf("%d",&a); printf("geteilt durch : "); scanf("%d",&b); if(b==0) raise(SIGFPE); else printf("Ergebniss = %d\n",a/b); return 0; }

Wenn sie also als Divisor den Wert 0 eingeben senden wir an unser Programm das Signal SIGFPE. Das Signal SIGFPE führt als Default - Aktion das Beenden des Programms aus.

POSIX.1 schreibt die Funktion raise übrigens nicht vor. ANSI-C schon.

kill

Für Linux-Programmierer gibt es auch die gleichnahmige Shellfunktion kill, die folgenden Synax hat.....

#include <sys/types.h>
#include <signal.h>

int kill(pid_t pid, int signalnummer);  

Die Schreibweise kill(getpid(),signalnummer) ist übrigens gleichwertig zu raise(signalnummer)

Mit kill können sie anderen Prozeßen ein Signal senden. Im Prozeßtabelleneintrag des Zielprozesses wird dann dementsprechendes Bit gesetzt. Damit dies aber Möglich ist müssen noch folgende Vorraussetzungen erfüllt sein......

  • die effektive Benutzererkennung ist 0 (Beispiel root)
  • effiktive oder reale Benutzererkennung ist gleich wie die des Zielprozesses

Im Fehlerfall gibt kill -1 zurück, ansonsten 0.

ein Kapitel zurück          nach oben           ein Kapitel weiter


© 2001,2002 Jürgen Wolf