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 |
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 |
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
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
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 Stringsapplikation
- 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 Stringsapplikation
- 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