Marsellus Wallace Geschrieben 1. Juli 2003 Geschrieben 1. Juli 2003 Hallo, gibt´s ne Möglichkeit in Java, alle Prozesse, die auf dem Betriebssystem laufen, anzuzeigen? D.h., ähnlich wie das "ps -ef" in Unix? Gruß, MW Zitieren
Jaraz Geschrieben 1. Juli 2003 Geschrieben 1. Juli 2003 Hi, soweit ich weiß, nur indem du auf Betriebssystem selbst zugreifst. also über die Runtime ps ausführen und das Ergebnis parsen. Gruß Jaraz Zitieren
Florian_K Geschrieben 1. Juli 2003 Geschrieben 1. Juli 2003 Soweit ich weiß basieren alle Java-Ansätze auf dem Sandbox-Prinzip, ob es jetzt Servlets, Applets oder Midlets sind. Und das sollte eigentlich auch verhindern, dass man aus Java an tieferliegende Systeminformationen kommen darf/soll. Es gibt sicher sinnvolle Ausnahmen wie Environment Variablen, verwendetes OS und Spracheinstellungen, aber so weit ich es verstanden habe gehört eien Prozessauflistung der auf dem Betriebssystem laufenden Programme nicht dazu. Als Workaround also das OS abfragen und proprietäre Tools des OS benutzen (z.B. ps bei UNIX/LINUX). Vielleicht hilft dir das ein wenig: http://www.javaworld.com/javaworld/javatips/jw-javatip53.html? gruß, Florian Zitieren
themaster Geschrieben 1. Juli 2003 Geschrieben 1. Juli 2003 Java selbst kann ich auf das Betriebssystem zugreifen. Das liegt allerdings an der Betriebssystemunanbhänigkeit und nicht an irgendwelchen Sandboxes. Nur Applets und Java Web Start Anwendungen unterliegen einer Sandbox und das auch nur wenn sie nicht signiert sind. Per JNI (java native interface) kann man C-Funktionen des Betriebsystems aufrufen. Dabei verlierst du allerdings die Platformunabhängigkeit. Das Programm wird dann nur auf Platformen laufen für die du eine C-Bibliothek mit den Funktionen hast du du benötigst. Unter Unix/Linux wurde ich es mit einen java-Prozessaufruf auf ps-ef versuchen und dann die Ausgabe innerhalb von Java parsen. Dies sollte mit den regeluären Ausdrücken ab 1.4 kein großes Problem mehr sein. Und Windows mußt du es mit JNI machen. Wenn es für deinen Zweck ausreichend ist, dass die Lösung nur unter Windows >2000 läuft, dann kann ich dir die Dateien senden. Zitieren
Marsellus Wallace Geschrieben 2. Juli 2003 Autor Geschrieben 2. Juli 2003 Danke mal für alle Antworten. :uli Das Programm ist hauptsächlich für Win 2000 gedacht. Aber da unsere Anwendungen auch auf Unix/Linux-Servern läuft, muss wohl beides implementiert werden. Dachte vielleicht gibts sogar ne plattformunabhängige Klasse, in der man Prozesse auflisten kann, so ähnlich wie bei System die Umgebungsvariablen etc., aber wenn dem nicht so ist muss ichs eben über die JNI/Runtime versuchen. @themaster: Ja, ein paar Codefetzen zum Einstieg wären nicht schlecht. Hab mit der JNI noch nie gearbeitet. Danke :e@sy Gruß MW Zitieren
themaster Geschrieben 2. Juli 2003 Geschrieben 2. Juli 2003 Hier meine Dateien, aber ein bißchen einlesen in JNI und C ersetzt es nicht. Man sollte schon das Prinzip verstehen. Javaklasse: package <<Package>> public class <<Klassenname>>{ static { System.loadLibrary("crmon_native"); } private native String int_getRunningProcesses(); public void execute() throws Exception { String list = int_getRunningProcesses(); String[] all = list.split(";"); } } [/PHP] C-Headerdatei: [PHP] /* DO NOT EDIT THIS FILE - it is machine generated */ #include <jni.h> #ifndef _Included_<<PACKAGE>>_<<KLASSENNAME>> #define _Included_<<PACKAGE>>_<<KLASSENNAME>> #ifdef __cplusplus extern "C" { #endif JNIEXPORT jstring JNICALL Java_<<PACKAGE>>_int_1<<KLASSENNAME>> (JNIEnv *, jobject); #ifdef __cplusplus } #endif #endif C-Quelldatei: #include <jni.h> #include "windows.h" #include "Tlhelp32.h" #include "tchar.h" JNIEXPORT jstring JNICALL Java_<<PACKAGE>>_int_1<<KLASSENNAME>> (JNIEnv * env, jobject object) { char result[1024*64]; int hRes; PROCESSENTRY32 pEntry; HANDLE hSnapShot; hSnapShot=CreateToolhelp32Snapshot (TH32CS_SNAPALL,0); pEntry.dwSize =sizeof(pEntry); //Get first process Process32First (hSnapShot,&pEntry); //Iterate thru all processes _tcscpy(result,""); hRes=Process32Next (hSnapShot,&pEntry); _tcscat(result,pEntry.szExeFile); while(1) { hRes=Process32Next (hSnapShot,&pEntry); if(hRes==FALSE) break; _tcscat(result,";"); _tcscat(result,pEntry.szExeFile); } CloseHandle(hSnapShot); return (*env)->NewStringUTF(env, result); } [/PHP] Ant-Dateiausschnitt: zum generatieren der C-Headerdatei [PHP] <target name="generate-header"> <javah destdir="win/nativesrc" classpath="win/bin;*.jar;common/bin;........." verbose="false" force="true"> <class name="<<PACKAGE>>.<<KLASSE>>"/> </javah> </target> Zitieren
Marsellus Wallace Geschrieben 3. Juli 2003 Autor Geschrieben 3. Juli 2003 @themaster: Danke für den Code. Sieht ja ziemlich :eek: aus. Wäre es nicht einfacher, gleich alles in C zu machen? (Brauche es irgendwann abe auch unter Unix...) Oder gleich mit dem JNI? Könntest du mir ein paar Fakten zum JNI geben? Aktuelle Version vorallem? Muss man da was zusätzlich installieren? Das wär :cool: Und was ist eigentlich eine Ant-Datei? Danke Zitieren
themaster Geschrieben 3. Juli 2003 Geschrieben 3. Juli 2003 Original geschrieben von Marsellus Wallace Danke für den Code. Sieht ja ziemlich :eek: aus. Wäre es nicht einfacher, gleich alles in C zu machen? (Brauche es irgendwann abe auch unter Unix...) Oder gleich mit dem JNI? Wenn die Anwendung nur die Prozessliste anzeigt wäre es zugegebener Massen ziemlich hirnriesig, dafür eine Anwendung mit Java zu schreiben, die per JNI auf C-Funktionen zugreift. Wenn die Anwendung aber sehr groß ist und die Anzeige der Prozesslist nur ein ganz kleiner Teil davon ist, dann ist es für mich ok. Könntest du mir ein paar Fakten zum JNI geben? Aktuelle Version vorallem? Muss man da was zusätzlich installieren? Das wär :cool: JNI ist das Java Native Interface und ist bei jedem Java Software Development Kit dabei. Wichtig dafür ist das Programm javah, dass die speziellen Headerdateien generiert. Mein Code setzt Java 1.4 voraus, da ich die Funktion split in java.lang.String verwende, aber das leiße sich natürlich auch anders machen. Beim Kompilieren des C-Codes muß die Headerdatei jni.h aus dem Java SDK eingebunden sein, damit alles klappt. Und was ist eigentlich eine Ant-Datei? Ant ist ein Programm das eine Art spezielle Scriptdatei ausführt mit der man Compilieren, Deployen, etc kann. Apache Ant is a Java-based build tool. In theory, it is kind of like Make, but without Make's wrinkles. (ant.apache.org) Grüße themaster Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.