Zum Inhalt springen

Betriebssystem-Prozesse


Marsellus Wallace

Empfohlene Beiträge

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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>

Link zu diesem Kommentar
Auf anderen Seiten teilen

@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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...