homeUnix & Internet Unix & Shell-Programmierung: Prozessverwaltung Prof. Dr. Uwe Schmidt FH Wedel

Prozessverwaltung

weiter

weiter

Unix-Kern

Prozesszustände
weiter
user mode
Prozess arbeitet nur auf eigenen Variablen und Funktionen
weiter
supervisor mode
Prozess arbeitet auf Betriebssystem-Variablen und mit BS-Funktionen
weiter
system calls
Systemaufrufe: Übergang: user mode ==> supervisor mode
weiter
Prozessverwaltung
  • E/A-Synchronisation
  • Scheduler: Prozessor-Zuteilung
  • Memory Management: Virtuelle Addressierung
  • Interprozess-Kommunikation
weiter
Prozessverwaltung
Systemaufrufe
 
  • fork
  • wait
  • exit
  • exec
weiter
Signale
Systemaufrufe
 
  • signal
  • kill
  • pause
  • alarm
weiter
Prozess Kommunikation
und Zugriffe auf externe Daten
 
  • pipe
  • mknod
  • open
  • read
  • write
weiter
Prozess-Daten
im Betriebssystem
pid
process id
ppid
parent process id
pgid
process group id
Deskriptoren
für offene E/A-Kanäle
env
Umgebungsvariablen
weiter
Virtuelle Addressierung
Jeder Prozess besitzt seinen eigenen Adressraum
weiter
Adressumsetzung
Abbildung: Virtuelle Adresse auf reale Adresse
weiter
merke
Hardware-Unterstützung erforderlich: MMU
weiter
?
Vorteile der virtuellen Adressierung?
weiter
Prozess- Erzeugung
durch Duplizieren eines Prozesses
weiter
fork
gabeln
 
Verdoppeln eines Prozesses
 
Funktion ohne Parameter
Funktion mit zwei Rücksprüngen
weiter
Resultat
0 für den Kindprozess
der neue pid des Kindprozesses für den Elternprozess
weiter
Verdoppeln
process1(...) { ... }
process2(...) { ... }
 
int main(...) {
  switch ( fork() ) {
 
  case  0: process1();
           break;
 
  case -1: exit(1);
 
  default: process2();
           break;
  }
}
weiter
exit
Beenden eines Prozesses
 
in der shell: exit oder exit rc
weiter
exec
Überlagern eines Prozesses
weiter
Wirkung
  1. Textsegment wird ausgewechselt
  2. Benutzer-Datensegment wird neu initialisiert
  3. System-Datensegment bleibt erhalten
  4. main im neuen Textsegment wird aufgerufen
weiter
wait
Synchronisation von Eltern- und Kindprozessen
weiter
Wirkung
  1. der runfende Prozess wartet auf die Beendigung eines Kindprozesses
  2. Resultat: Der pid des beendeten Kindprozesses und der return code
weiter
Programm-Start
aus der shell
 
  1. der shell-Prozess dupliziert sich
  2. der Kindprozess führt exec aus
  3. der Elternprozess führt wait mit pid des Kindprozesses aus
weiter
system.c
C-Bibliotheksroutine
vereinfachte Version ohne Signalbehandlung
 
aus: Advanced Programming in the UNIX Environment von W. Richard Stevens
 
#include        <sys/types.h>
#include        <sys/wait.h>
#include        <errno.h>
#include        <unistd.h>
 
int
system(const char *cmdstring)
{
  pid_t pid;
  int   status;
 
  pid = fork();         /* try do double process */
 
  if (pid < 0) {        /* failure */
    status = -1;
 
  }
  else if (pid == 0) {  /* child process */
 
    execl("/bin/sh""sh",
          "-c"cmdstring(char *) 0);
 
    status = 127;       /* execl error */
 
  }
  else {                /* parent process */
 
    while (wait(&status) != pid);
 
  }
 
  return(status);
}
weiter

weiter

Signale

Zweck
  • Unterbrechung von Prozessen
  • Abbruch von Prozessen
  • Synchronisation von Prozessen
weiter
senden
von Signalen
in C
#include <sys/types.h>
#include <signal.h>
 
int kill(pid_t pidint sig);
in der shell
kill [-s sigspec | -n signum | -sigspec] [pid | jobspec] ...
weiter
Wirkung
Default: Abbruch des empfangenen Prozesses
weiter
Beispiele
Senden von Signalen
 
kill 4711
 
kill -15 4712     # SIGTERM
 
kill -9  4712     # SIGKILL
 
kill %1           # terminate bg job 1
weiter
Signale
> kill -l
 1) SIGHUP
 2) SIGINT
 3) SIGQUIT
 4) SIGILL
 5) SIGTRAP
 6) SIGABRT
 7) SIGBUS
 8) SIGFPE
 9) SIGKILL
10) SIGUSR1
11) SIGSEGV
12) SIGUSR2
13) SIGPIPE
14) SIGALRM
15) SIGTERM
 ...
weiter
Signalbehandlung
Abfangen von Signalen
in der shell
trap [-lp] [arg] [sigspec ...]
weiter
Beispiele
# ignore signal SIGINT
trap "" SIGINT
 
# cleanup for SIGTERM
trap "rm -f /tmp/tmpfile-$$ ; exit 1" 15
 
# cleanup for normal shell exit and signals
trap cleanup 0 2 15
weiter
Beispiel Skript
#!/bin/bash
 
cleanup () {
  (
  echo ""
  echo "process $$ terminated by signal 15 (SIGTERM)"
  ) 1>&2
  rm /tmp/date-$$
  exit
}
 
ignore () {
  (
  echo ""
  echo "process $$ : signal 3 (SIGQUIT)" \
       "or 10 (SIGUSR1) ignored"
  ) 1>&2
}
 
trap "cleanup" 0 15
trap "ignore" 3 10
 
while true
do
  date >> /tmp/date-$$
  sleep 5
done
weiter
merke
SIGKILL nicht abfangbar und behandelbar.
weiter
Prozess-Info
und Informationen über Betriebssystem-Zustände im /proc-Dateisystem
weiter
gut
Normale Dateisystem-Schnittstelle für den Zugriff auf den Systemzustand
weiter
gut
ps, top: Sehr einfache und schnelle Prozessinformation.
weiter
merke
Zombi-Prozesse: Kindprozesse bei denen der Elternprozess vor den Kinprozessen beendet ist, ohne dass der Elternprozess auf die Beendigung der Kindprozesse gewartet hat.
weiter

Letzte Änderung: 21.01.2013
© Prof. Dr. Uwe Schmidt
Prof. Dr. Uwe Schmidt FH Wedel