Unix­1 im Wintersemester 1994/95

5.  Übungsblatt

Aufgabe 1  (theoretisch, 2 Punkte)

Angenommen, der Teil der Shell, der Prozesse ausführt und dabei die Standardausgabe umlenkt, ist folgendermaßen implementiert:

do_exec (char *path, char **av, char **ev, char *output)

{ if ((fd = creat(output, 0666)) < 0) return (-1); switch (fork()) { case 0: if (dup2 (1, fd) < 0) return (-1); execve (path, av, ev); case -1: return (-1); default: wait (0); } }

Was ist an dieser Implementierung nicht korrekt?  Was passiert nach einigen Aufrufen?

Aufgabe 2  (theoretisch, 2 Punkte)

Welche Rollen spielen die real und effective User­ID eines Prozesses?  Beschreibe eine praktische Anwendung des Set­UID­Bits!

Aufgabe 3  (theoretisch, 1 Punkt)

Nenne mindestens drei Möglichkeiten, wie ein Prozeß verhindern kann, daß er bei Eingabe von ^C am Terminal terminiert!

Aufgabe 4  (theoretisch, 2 Punkte)

Was passiert mit einem Prozeß, der aus einer ,,leeren'' Pipe lesen will?  Was ist, wenn der Kommunikationspartner schon terminiert ist?  Was geschieht, wenn ein Prozeß bei terminiertem Partner in eine Pipe schreibt?

Aufgabe 5  (theoretisch, 3 Punkte)

Erläutere kurz den Zusammenhang zwischen Terminals, Signalen, Prozeßgruppen, Controlling TTYs und Sessions.

Aufgabe 6  (praktisch, 10 Punkte)

Erweitert Euren Shell msh um das Umlenken der Ein­ und Ausgabe in ein File.  Das Auftreten einer pipe soll ebenfalls korrekt behandelt werden. Um auf die Termination von Hintergrundprozessen warten zu können, ist das builtin­Kommando wait zu implementieren:

	wait
Warten auf die Termination eines der Hintergrundprozesse.  Anschließende Ausgabe der Prozeß­ID des terminierten Prozesses.

	wait pid

Warten auf die Termination des angegebenen Prozesses pid Erweitert msh zusätzlich um die folgende Signalbehandlung:

Erzeugt für jedes zu startende Hintergrundkommando mit der Funktion setpgrp() eine neue Prozeßgruppe.  Das Signal SIGINT kann am Terminal durch ^C und das Signal SIGQUIT durch ^\ erzeugt werden.  Mit dem Kommando stty kann diese Tastaturbelegung umdefiniert werden.