de.bsvrz.sys.startstopp.prozessvew
Class BetriebssystemProzess

java.lang.Object
  extended by de.bsvrz.sys.startstopp.prozessvew.BetriebssystemProzess

public class BetriebssystemProzess
extends java.lang.Object

Klasse stellt Methoden zur Verfügung die es ermöglichen zu Prüfen ob Applikationen bereits auf diesem Rechner laufen bzw. diese auf Betriebssystemebene zu beenden. Das Erkennen ob ein Prozess bereits läuft wird je nach Betriebssystem unterschiedlich gehandhabt: - UNIX/LINUX: es wird der Systembefehl ps -ef<\code> ausgeführt. Das Ergebnis dieses Befehls wird dann interpetiert.
- Windows: unter Windows gibt es nicht unter allen Betriebssystemen einen Befehl um die Prozessliste aufzulisten. Abhilfe schaffen da die "Ps Tools" von Micrososft, die es ermögichen eine Prozessliste zu erstellen und Prozesse zu beenden. (http://www.microsoft.com/germany/technet/sysinternals/utilities/PsTools.mspx) Die Klasse erwartet, dass die Tools pslist.exe bzw. pskill.exe sich in einem Verzeichnis befinden, dass über die path Variable des Betriebssystem erreichbar ist (Sinnvollerweise C:\Windows\System32). Unter Java auf Windows gibt es keine Möglichkeit die Pid eines von Java aus gestarteten Prozesses zu bestimmen. Daher kommt hier folgendes Vorgehen zum Zuge: 1. bevor ein Prozess gestartet wird wird die aktuelle Prozessliste ausgelesen (hierfür muss die Methode iniPidBestimmung() aufgerufen werden. 2. Der Prozess wird gestartet 3. es wird wieder die Prozessliste eingelesen und mit der ersten Prozessliste verglichen. Der neu hinzugekommene Prozess muss der gestartet Prozess sein. (hierfür muss die Methode bestimmePid() aufgerufen werden. - Mac: Verfahren nicht installiert.

Author:
Dambach Werke GmbH

Field Summary
private  java.lang.String m_applikation
          Aufruf der zu prüfenden Applikation
protected static de.bsvrz.sys.funclib.debug.Debug m_debug
          Debug-Logger.
private  boolean m_fuellen
          Merker beim Windowssystem ob die Liste der Prozesse gefüllt oder ausgewertet werden soll.
private  int m_pid
          Pid der Applikation
private  ProzessDaten m_prozessDaten
          Prozessdaten des zu prüfenden Prozesses
private  java.util.List<java.lang.Integer> m_windowPids
          Liste mit den aktuell bekannten Pid des betriebssystems
 
Constructor Summary
BetriebssystemProzess(ProzessDaten prozessDaten)
          Konstruktor der Klasse.
 
Method Summary
 void beendeProzess()
          Methode beendet die Applikation auf Betriebsysremebene.
 void bestimmePid()
          Methode bestimmt sofern vorher die Methode iniPidBestimmung() aufgerufen wurde die Pid eines Prozesses auf einem Windowssystem.
private  int bestimmePidUnix(java.util.List<java.lang.String> ausgabe, java.lang.String applikation)
          Methode bestimmt die Pid zu einem bestimmten Prozess unter Unix/Linux.
private  int bestimmePidWindows(java.util.List<java.lang.String> ausgabe, java.lang.String applikation)
          Methode bestimmt die Pid zu einem bestimmten Prozess unter Windows.
 int getPid()
          Methode liefert die Betriebssystem PID der Inkarnation zurück.
 void iniPidBestimmung()
          Methode initialisiert auf Windowssystemen die Felder, die zur Bestimmung der Pid eines Prozesses benötigt werden.
 boolean isGestartet()
          Methode prüft ob eine Applikation bereits gestartet ist.
private  int lesePid(java.lang.String text)
          Methode wandelt einen String in eine Zahl um
private  void pruefeLinux()
          Methode prüft ob auf einem Linux Rechner eine Prozess läuft.
private  void pruefeUnix()
          Methode prüft ob auf einem Unix Rechner eine Prozess läuft.
private  void pruefeWindows()
          Methode prüft ob auf einem Windows Rechner eine Prozess läuft.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

m_debug

protected static final de.bsvrz.sys.funclib.debug.Debug m_debug
Debug-Logger.


m_applikation

private java.lang.String m_applikation
Aufruf der zu prüfenden Applikation


m_pid

private int m_pid
Pid der Applikation


m_fuellen

private boolean m_fuellen
Merker beim Windowssystem ob die Liste der Prozesse gefüllt oder ausgewertet werden soll.


m_prozessDaten

private ProzessDaten m_prozessDaten
Prozessdaten des zu prüfenden Prozesses


m_windowPids

private java.util.List<java.lang.Integer> m_windowPids
Liste mit den aktuell bekannten Pid des betriebssystems

Constructor Detail

BetriebssystemProzess

public BetriebssystemProzess(ProzessDaten prozessDaten)
Konstruktor der Klasse. In diesem Konstruktor wird festgestellt auf welcher Betriebssystemplattform die Applikation gestartet wurde.

Parameters:
prozessDaten - Prozessdaten der Inkarnation
Method Detail

isGestartet

public boolean isGestartet()
Methode prüft ob eine Applikation bereits gestartet ist. Es wird dabei nur geprüft, ob eine Applikation läuft, die von einer StartStopp Applikation mit demselben Inkarnationsnamen wie die jetzt laufende, gestartet wurde (siehe StartStoppApp). Hierbei werden die Informationen die in den "Benutzereinstellungen in Windows-Registry oder XML-Dokumenten" (siehe Klasse StartStoppPräferenz) gespeichert sind, ausgewertet.

Returns:
true: Applikation läuft schon, sonst false

getPid

public int getPid()
Methode liefert die Betriebssystem PID der Inkarnation zurück. Unter Unix/Linux wird hierzu der Befehl "ps -ef" ausgewertet, unter Windows das Ergebnis des letzten Aufrufs der Methode "bestimmePid".

Returns:
> 0 Pid, sonst Fehler

beendeProzess

public void beendeProzess()
Methode beendet die Applikation auf Betriebsysremebene. Je nach Betriebssystem werden dabei folgende Systembefehle verwendet:
UNIX/Linux: sh kill -p PID
Windows: pskill PID
Mac: nicht realisiert


pruefeUnix

private void pruefeUnix()
Methode prüft ob auf einem Unix Rechner eine Prozess läuft. Hierzu wird der Befehl "ps -ef" ausgeführt und das Ergebnis ausgewertet.


pruefeLinux

private void pruefeLinux()
Methode prüft ob auf einem Linux Rechner eine Prozess läuft. Hierzu wird der Befehl "ps -ef --cols 10000" ausgeführt und das Ergebnis ausgewertet. '--cols 10000' wird benötigt um die Fensterbreite zu setzen, speziell für den Start im Hintergrund (startproc).


bestimmePidUnix

private int bestimmePidUnix(java.util.List<java.lang.String> ausgabe,
                            java.lang.String applikation)
Methode bestimmt die Pid zu einem bestimmten Prozess unter Unix/Linux. Als Input dient eine Liste von Strings, in der die Ausgabe des Systembefehls "ps -ef" enthalten ist.

Parameters:
ausgabe - Ausgabe des Systembefehle "ps -ef" zeilenweise als Liste von Strings
applikation - Aufruf der Applikation die geprüft werden soll
Returns:
-1: Applikation nicht gefunden, > 0 Pid der Applikation

iniPidBestimmung

public void iniPidBestimmung()
Methode initialisiert auf Windowssystemen die Felder, die zur Bestimmung der Pid eines Prozesses benötigt werden. Unter Unix/Linux Systemen hat die Methode keine Funktionalität.


bestimmePid

public void bestimmePid()
Methode bestimmt sofern vorher die Methode iniPidBestimmung() aufgerufen wurde die Pid eines Prozesses auf einem Windowssystem. Unter Unix/Linux Systemen hat die Methode keine Funktionalität. Wird die Methode aufgerufen ohne vorher die Methode iniPidBestimmung() aufgerufen zu haben, wird eine IllegalArgumentException ausgelöst.

Throws:
java.lang.IllegalArgumentException

pruefeWindows

private void pruefeWindows()
Methode prüft ob auf einem Windows Rechner eine Prozess läuft. Hierzu wird der Befehl "pslist" ausgeführt und das Ergebnis ausgewertet.


bestimmePidWindows

private int bestimmePidWindows(java.util.List<java.lang.String> ausgabe,
                               java.lang.String applikation)
Methode bestimmt die Pid zu einem bestimmten Prozess unter Windows. Als Input dient eine Liste von Strings, in der die Ausgabe des Systembefehls "pslist" enthalten ist.

Parameters:
ausgabe - Ausgabe des Systembefehle "ps -ef" zeilenweise als Liste von Strings
applikation - Aufruf der Applikation die geprüft werden soll
Returns:
-1: Applikation nicht gefunden, > 0 Pid der Applikation

lesePid

private int lesePid(java.lang.String text)
Methode wandelt einen String in eine Zahl um

Parameters:
text - umzuwandelnder String
Returns:
Zahl