Exercise: Process Creation
Last updated
Last updated
Ziel: Entwickeln Sie ein C-Programm, das die Erzeugung, Ausführung und das Monitoring von Prozessen auf der Konsole ermöglicht. Das Programm soll es dem Benutzer ermöglichen, neue Prozesse zu starten, den Status laufender Prozesse anzuzeigen und Prozesse zu beenden.
Anforderungen:
Prozesserzeugung: Das Programm sollte den Benutzer auffordern, den Namen eines ausführbaren Programms (z.B. ein anderes C-Programm, das bereits kompiliert wurde) einzugeben. Anschließend wird dieses Programm als neuer Prozess gestartet.
Prozessüberwachung: Nach der Erzeugung eines Prozesses soll das Programm dessen PID (Prozess-ID) auf der Konsole ausgeben. Der Benutzer kann eine Liste aller derzeit vom Prozessmanager verwalteten Prozesse anzeigen lassen, einschließlich ihrer PIDs.
Prozessbeendigung: Der Benutzer soll die Möglichkeit haben, einen Prozess durch Eingabe seiner PID zu beenden.
Hinweise zur Implementierung:
Verwenden Sie die fork()
- und exec()
bzw. deren Varianten um neue Prozesse zu erstellen. fork()
erzeugt einen neuen Prozess durch Duplizieren des aufrufenden Prozesses, und exec()
ersetzt den Prozessspeicher mit einem neuen Programm. Für die Unterschiede lesen Sie z.B. den Stackoverflow-Artikel .
Verwenden Sie wait()
oder waitpid()
-Systemaufrufe, um auf die Beendigung von Prozessen zu warten.
Für die Beendigung von Prozessen können Sie auch den kill()
-Systemaufruf verwenden, der es ermöglicht, Signale an Prozesse zu senden (z.B. SIGKILL zum Beenden eines Prozesses).
Um den Status von Prozessen zu überwachen, können Sie eine einfache Datenstruktur (z.B. eine Liste oder ein Array) verwenden, um die PIDs der gestarteten Prozesse zu speichern.
Hinweise zur Gestaltung:
Es genügt, wenn Sie eine einfache Abfrage über die Kommandozeile realisieren. Nutzen Sie hierfür z.B. printf()
um ein kleines Menü auszugeben und scanf()
und fgets()
um die Eingaben der Anwender auszulesen:
Nach dem Start könnte das Programm folgende Ausgabe auf der Konsole zeigen:
Wenn Sie 1
eingeben und die Eingabetaste drücken, fragt das Programm nach dem Namen eines auszuführenden Programms:
Sie könnten z.B. vi
(einen Texteditor unter Linux) eingeben. Das Programm startet dann vi
und zeigt dessen PID:
etc.
Hinweis zur Abgabe:
Sie checken das Programm in Ihrem Git Repository unter einem ordern process_manager ein.