RemoteProcess

Aufgabe

Das bestehende Grundmodul des PVS soll um Komponenten erweitert werden, die es ermöglichen auf einem oder mehreren Maschinen gleichzeitig von der PVS-Steuerkonsole aus Prozesse zu starten, sich anzeigen zu lassen und zu stoppen.

Beschreibung der Erweiterung

Zwei neue Buttons in der Toolbar:
  1. Prozesse starten - ein Dialogfenster öffnet sich: man kann einen Prozess eingeben, dieser wird nach einer erneuten Abfrage auf allen in der Clientliste ausgewählen Clients gestartet, falls er existiert - in einer Liste über dem Eingabefeld können Prozesse abgespeichert werden, ein Klick auf einen Prozess fügt den Command automatisch in das Eingabefeld ein, so kann der Dozent eine Reihe von benötigten Prozessen abspeichern und einfach auswählen.
  2. Prozessliste anzeigen - ein Dialogfenster öffnet sich: für jeden Client wird eine Karteikarte erstellt. Die Karteikarten beinhalten eine Prozessliste, in der zu jedem Prozess die ID, den Prozessnamen und die Commandline anzeigt. Mit zwei Buttons lässt sich die Liste aktualisieren und die in der Liste markierten Prozesse beenden. Unterhalb der Liste befindet sich ein Eingabefeld, der hier eingegebene Prozess wird bei einem Klick auf Start process auf dem zur Karteikarte gehörenden Client gestartet. Es gibt die Möglichkeit die Datei pvsmgr.conf zu bearbeiten und Filter einzugeben, die aus der Prozessliste ausgeblendet werden.

Die Prozessliste wird automatisch für den aktiven Client alle 5 Sekunden aktualisiert, falls in der Prozessliste keine Zeile markiert ist. Wird ein anderer Client ausgewählt aktualisiert sich dessen Prozessliste automatisch. Es können mehrere Prozesse gleichzeitig ausgewählt werden. Ein Klick auf Start process oder Stop process führt genauso zu einem Aktualisieren der Prozessliste, wie ein Klick auf Refresh, in allen Fällen wird die Auswahl in der Prozessliste zurückgesetzt. Möchte der Dozent die Prozessliste komplett durchscrollen empfiehlt es sich, dass er zuerst einen Eintrag in der Prozessliste markiert, da diese bei einem automatischen Aktualisieren wieder an den Anfang scrollt.

Herangehensweise

Erweiterung des Commandhandlings um die Idents:
  • SHOWPROCESSES - der Client soll seine Prozessliste aktualisieren, in der Nachricht werden die Filtereigenschaften mitgeschickt, pvs pvsgui filtert z.B. die Prozesse pvs und pvsgui heraus
  • KILLPROCESS - der Client soll den in der Nachricht angefügten Prozess beenden
  • STARTPROCESS - der Client soll den in der Nachricht angefügten Prozess starten
  • PROCESSES - hier entscheidet der Inhalt der Nachricht, was zu tun ist, möglich sind: START ERROR errorcode, STOP ERROR errorcode, SHOW finished, SHOW clear und SHOW ERROR

Prozesse anzeigen:
PVSCOMMAND mit Ident SHOWPROCESSES an den Client, die eigentliche Nachricht gibt einen oder mehrere Filter an:
PVSCOMMAND mit Ident PROCESSES und Nachricht SHOW clear führt zum leeren des Prozessvektors, anschließend auslesen von /proc/. Jeder Ordner der nur aus Zahlen besteht wird durchsucht, die Datei status wird ausgelesen, falls die UID der UID des Benutzers entspricht wird der Name gespeichert, außerdem werden die ProzessID und zusätzlich noch einige Zeichen der Datei cmdline ausgelesen und gespeichert. Zusammengefügt zu einem String wird jeder Prozess als Inhalt eines PVSCOMMAND mit dem ident PROCESSES weitergesendet.
Der Client wurde um einen QVector<QString> erweitert, jeder Eintrag im QVector entspricht dabei einem Prozess. Dieser QVector wird von der Prozessliste ausgelesen, aufgespalten und in die Prozessliste eingefügt.
Aus der Prozessliste werden Prozesse die für PVS nötig sind herausgefiltert, ebenso alle Prozesse die nicht dem User gehören, dies hat den Hintergrund, dass ein versehentliches beenden eines zu PVS gehörenden Prozess zu einem Absturz des Programmes führt. Für nicht dem User gehörende Prozesse hat der User keine Rechte sie zu beenden.

Prozesse starten/beenden:
PVSCOMMAND mit Ident STARTPROCESS oder KILLPROCESS an den Client, hierbei beinhaltet die Nachricht den zu startenden/beendenden Prozess:
Ein neuer QProcess wird gestartet. Wenn ein Prozess beendet werden soll wird ein QProcess kill prozessID gestartet.
Prozesse werden zwar unabhängig vom PVS gestartet, ein Absturz von PVS führt also nicht zum beenden eines gestarteten Prozesses, jedoch führt entfernt gestoppter Prozess automatisch zu einem beenden des Programms auf dem Clientrechner. Änderungen, die der Nutzer am Client in seinem Programm gemacht hat werden dann NICHT gespeichert.

Falls beim Starten/Beenden/Anzeigen Fehler auftreten wird ein PVSCOMMAND mit Ident START/STOP/SHOW und Inhalt ERROR START/STOP/SHOW Errorcode gesendet. Es wird keine Rückmeldung in der Form eines Dialogs oder einer Nachricht gegeben, da dies z.B. bei 20 Clienten mit nicht gestartetem Prozess zu Unübersichtlichkeit führt.

Konfigurationsdatei:
Die Datei pvsmgr.conf bspeichert sowohl Filter, als auch Prozesse ab, die der Dozent im Prozesse starten-Dialog angezeigt bekommt. Eine Konfigurationsdatei sieht beispielsweise aus wie folgt:

[RemoteProcessesList]
size=2
1\command=oowriter
1\description=OpenOffice Writer
2\command=oocalc
2\description=OpenOffice Calc
filter=pvs pvsgui x11vnc dbus-launch dbus-daemon

Die Zeile filter= beschreibt die Filter, size beginnt mit 1, falls ein Prozess eingegeben wurde. Für jeden neuen Prozess wird size inkrementiert und eine neue Gruppe mit command (dem auszuführenden Prozess) und description (einer Beschreibung) angelegt.