Rheinwerk Computing < openbook > Rheinwerk Computing - Professionelle Bücher. Auch für Einsteiger.
Professionelle Bücher. Auch für Einsteiger

 << zurück
Linux-UNIX-Programmierung von Jürgen Wolf
Das umfassende Handbuch – 2., aktualisierte und erweiterte Auflage 2006
Buch: Linux-UNIX-Programmierung

Linux-UNIX-Programmierung
1216 S., mit CD, 49,90 Euro
Rheinwerk Computing
ISBN 3-89842-749-8
gp Kapitel 7 Dämonen, Zombies und Prozesse
  gp 7.1 Was ist ein Prozess?
  gp 7.2 Prozesskomponente
    gp 7.2.1 Prozessnummer (PID)
    gp 7.2.2 Prozessnummer des Vaterprozesses (PPID)
    gp 7.2.3 Benutzer- und Gruppennummer eines Prozesses (UID, EUID, GID, EGID)
    gp 7.2.4 Prozessstatus
    gp 7.2.5 Prozesspriorität
    gp 7.2.6 Timesharing-Prozesse
    gp 7.2.7 Prozessauslagerung
    gp 7.2.8 Steuerterminal
  gp 7.3 Prozesse überwachen – ps, top, kpm
  gp 7.4 Lebenszyklus eines Prozesses
  gp 7.5 Umgebungsvariablen eines Prozesses
    gp 7.5.1 Einzelne Umgebungsvariablen abfragen
    gp 7.5.2 Umgebungsvariable verändern oder hinzufügen – putenv() und setenv()
    gp 7.5.3 Löschen von Umgebungsvariablen – unsetenv() und clearenv()
  gp 7.6 Ressourcenlimits eines Prozesses
    gp 7.6.1 Mehr Sicherheit mit Ressourcenlimits
  gp 7.7 Prozesserkennung
  gp 7.8 Erzeugung von Prozessen – fork()
    gp 7.8.1 Pufferung
    gp 7.8.2 Was wird vererbt und was nicht?
    gp 7.8.3 Einen Prozess mit veränderter Priorität erzeugen
  gp 7.9 Warten auf einen Prozess
  gp 7.10 Die exec-Familie
    gp 7.10.1 execl()
    gp 7.10.2 execve()
    gp 7.10.3 execv()
    gp 7.10.4 execle()
    gp 7.10.5 execlp()
    gp 7.10.6 execvp()
    gp 7.10.7 Kindprozesse mit exec-Aufruf überlagern
  gp 7.11 Kommandoaufrufe aus dem Programm – system()
  gp 7.12 Dämonprozesse
    gp 7.12.1 Wie ein Prozess zum Dämon wird ...
    gp 7.12.2 Dämon, sprich mit uns ...
    gp 7.12.3 Protokollieren von Dämonen – syslog()
    gp 7.12.4 syslog() in der Praxis
    gp 7.12.5 Den Dämon, den ich rief ...
  gp 7.13 Rund um die Ausführung von Prozessen
    gp 7.13.1 Einen Dämon beim Booten mit einem init-Skript starten
    gp 7.13.2 Hintergrundprozesse und Jobkontrolle
    gp 7.13.3 Prozesse zeitgesteuert ausführen (cron-Jobs)
  gp 7.14 Zusammenfassung und Ausblick


Rheinwerk Computing

7.7 Prozesserkennung  toptop

Zum Ermitteln der eigenen Prozess-ID (PID) oder der ID des Prozesses (Elternprozess), der den Start veranlasst hat, stehen Ihnen die Funktionen getpid() und getppid() zur Verfügung. Wird die reale oder effektive User-ID benötigt, kann dies mit getuid() und geteuid() erfragt werden. Für reale oder effektive Gruppen-IDs sind die Funktionen getgid() und getegid() vorhanden.

#include <sys/types.h>
#include <unistd. h.>
pid_t getpid(void);     
pid_t getppid(void);    
pid_t getuid(void);     
pid_t geteuid(void);    
pid_t getgid(void);     
pid_t getegid(void);    

Das folgende Beispiel demonstriert Ihnen, wie Sie all diese Prozesskenndaten ausgeben können.

/* proz_dat.c */
#include <stdio.h>
#include <stdlib.h>
#include <unistd. h.>
#include <sys/types.h>
int main( void ) {
   printf("Ich bin Nummer %d\n", getpid());
   printf("Mein Elternprozess hat die Nummer %d\n",
      getppid());
   printf("Die User-ID effektiv : %d --> real: %d\n",
      geteuid(),getuid());
   printf("Die Group-ID effektiv: %d --> real: %d\n",
      getegid(),getgid());   
   return EXIT_SUCCESS;
}

Das Programm bei der Ausführung:

$ gcc -o proz_dat proz_dat.c
$ ./proz_dat
Ich bin Nummer 3186
Mein Elternprozess hat die Nummer 1952
Die User-ID effektiv : 500 --> real: 500
Die Group-ID effektiv: 100 --> real: 100

Wollen/müssen Sie die realen und effektiven User- und Group-IDs verändern, können Sie folgende Funktionen verwenden:

#include <unistd. h.>
#include <sys/types.h>
int setuid(uid_t uid);
int setgid(gid_t gid);

setuid() bzw. setgid() setzen die effektive User- bzw. Gruppen-ID des aktuellen Prozesses. Wird diese Funktion durch den Superuser aufgerufen, dann werden auch die reale und die gesicherte (Saved Set-User-ID) User- bzw. Gruppen-ID gesetzt.

Unter Linux ist setuid() bzw. setgid(), wie unter SYSV, mit SAVED_IDS implementiert. Dies erlaubt einem setuid()- bzw. setgid()-Programm (für Nicht-Superuser), alle Gruppenprivilegien abzugeben, einige nicht privilegierte Arbeiten zu erledigen und dann, auf sichere Art und Weise, die originale effektive User- bzw. Gruppen-ID zurückzuerhalten.

Wenn es sich um den Superuser oder um ein Programm handelt, bei dem das Set-UID-Bit bzw. das Set-GID-Bit auf root gesetzt ist, ist besondere Sorgfalt notwendig. Die setuid()- bzw. setgid()-Funktion überprüft die effektive UID bzw. GID des aufrufenden Prozesses, und wenn es die des Superusers ist, werden alle diesen Prozess betreffenden User- bzw. Gruppen-IDs auf uid bzw. gid gesetzt. Nachdem dies geschehen ist, ist es für das Programm unmöglich, wieder Superuser-Privilegien zu erhalten.

Bei Erfolg wird 0, ansonsten bei einem Fehler -1 zurückgegeben. errno wird bei einem entsprechenden Wert (meistens EPERM) gesetzt.

 << zurück
  
  Zum Rheinwerk-Shop
Neuauflage: Linux-UNIX-Programmierung
Neuauflage:
Linux-UNIX-
Programmierung

bestellen
 Ihre Meinung?
Wie hat Ihnen das Openbook gefallen?
Ihre Meinung

 Buchtipps
Zum Rheinwerk-Shop: Linux-Server






 Linux-Server


Zum Rheinwerk-Shop: Das Komplettpaket LPIC-1 & LPIC-2






 Das Komplettpaket
 LPIC-1 & LPIC-2


Zum Rheinwerk-Shop: Linux-Hochverfügbarkeit






 Linux-
 Hochverfügbarkeit


Zum Rheinwerk-Shop: Shell-Programmierung






 Shell-
 Programmierung


Zum Rheinwerk-Shop: Linux Handbuch






 Linux Handbuch


 Lieferung
Versandkostenfrei bestellen in Deutschland, Österreich und der Schweiz
Info





Copyright © Rheinwerk Verlag GmbH 2006
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das Openbook denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt.
Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


Nutzungsbestimmungen | Datenschutz | Impressum

Rheinwerk Verlag GmbH, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, service@rheinwerk-verlag.de

Cookie-Einstellungen ändern