Anmelden

Archiv verlassen und diese Seite im Standarddesign anzeigen : Gucken ob ein Prozess noch läuft (UNIX, JAVA)



Saiz
27-08-2004, 10:08
Ich will ein Java Programm machen das wenn es gestartet wird überprüfen soll ob ein bestimmtes Programm noch läuft. Wenn ja soll es mit kill -9 gekillt werden.

Mein Problem ist wie überprüfe ich am besten das in
ps -aef |grep dasProgramm
das Programm noch da ist?

Bitte nur in Java.

Danke in voraus

peschmae
27-08-2004, 10:34
Wieso in Java? Warum nicht einfach "killall -9 <programmname>"?

MfG Peschmä

Saiz
27-08-2004, 10:45
weil das Java Programm dazu da ist zu überprügen und sicherzustellen ob ein anderes Programm richtig und sorgfältig runtergefahren ist.
Wenn nicht killt das Programm das andere Programm mit kill -9 und schreibt in der Logfile Programm ist nicht Ordnunggemäss runtergefahren

Und meine Frage ist wie kann ich denn Befehl ps -aef|grep MeinProgramm
in einen String reintun und dann überprüfen?

Saiz
27-08-2004, 12:34
So habe ein komisches Problem gefunden

Process proc = Runtime.getRuntime().exec(ps -aef);
geht supa
aber
Process proc = Runtime.getRuntime().exec(ps -aef |grep lala);

geht nicht.
Warum? Kann java das | nicht???

peschmae
27-08-2004, 12:44
Genau, die Pipe ist ein Konstrukt das von der Shell implementiert wird - und mit getRuntime().exec() augeführte Programme laufen normalerweise nicht inner shell.

Deshalb eher sowas in die Richtung:


Process proc = Runtime.getRuntime().exec("bash -c \"ps -aef |grep lala\"");


Geht wohl auch nicht weil vermutlich der StringTokenizer der da automatisch drüberläuft die Sache nicht korrekt auseinandernimmt. Also musst du wohl ein String[] übergeben mit jeweils "bash" "-c" und "ps -aef | grep lala" als Arrayelemente.

MfG Peschmä

Saiz
27-08-2004, 13:19
ok danke so geht es.

Wie kann ich jetzt in einem String nachgucken obdas Wort:

Auto

und

2158

drinne sind?
Aber nur wenn die Beide da drinne gefunden sind muss es ein True geben.

peschmae
27-08-2004, 13:34
Mit Regexps geht das - Java kann das mittlerweile.

Wie die entsprechende Methode genau heisst weiss ich nicht sicher, ich glaube "match()" (in der String-Klasse natürlich)

MfG Peschmä