Shell-Prozess lässt Thread nicht enden

D

DP1978

Gast
Liebe Forengemeinde,

Ich habe das Problem, dass ich ein Shellscript aus einem Thread heraus starte und es nicht immer wie gewünscht beendet wird und darum der ganze Thread hängt. Ich habe nun das ganze Wochenende über versucht heraus zu finden warum das so ist und habe leider keine Lösung gefunden.

Ich habe für diesen Zweck eine Prozessklasse geschrieben:

Java:
import java.io.*;
import java.util.*;

public class cProcess
{
    String strCommand = "";

    public void cProcess()
    {
        
    }

    public String execute(String strCommand)
    {
        this.strCommand = strCommand;
        String result = "";
        try
        {
            Process p = Runtime.getRuntime().exec(this.strCommand);
            BufferedReader stdInput = new BufferedReader(new InputStreamReader(p.getInputStream()));
            BufferedReader stdError = new BufferedReader(new InputStreamReader(p.getErrorStream()));
            p.waitFor();
            String strThisLine = "";
            while ((strThisLine = stdInput.readLine()) != null)
            {
                result = result + strThisLine + "\n";
            }
            while ((strThisLine = stdError.readLine()) != null)
            {
                result = result + strThisLine + "\n";
            }
            p.destroy();
        }
        catch (Exception e)
        {
            
        }
        return result;
    }
}

Also wenn jemand eine Idee hat wie ich das Problem in den Griff bekomme, dann wäre das echt klasse ...
 
G

Gast2

Gast
  1. wenn Du das Lesen der Ein- und Ausgabe asynchron startest bekommst Du evt. einen Hinweis was schief läuft ... im Moment liest Du nur wenn der Prozess (bzw. Script) beendet wurde
  2. mal abgesehen davon liegt das Problem beim Script und nicht bei Java - da passt alles
 
D

DP1978

Gast
Hallo Mogel,

Dass der Fehler bei meinem Script liegt weiss ich ;)

Mir geht es darum, dass der Thread wenn keine Rückmeldung vom Programm kommt nach spätestens X Sekunden beendet wird, da es immer mal sein kann, dass sich da was weg hängt. Und dann muss ein finally möglich sein mit einer Ausgabe in eine Logdatei, dass etwas schief gelaufen ist und wo es schief gelaufen ist.
 

FArt

Top Contributor
Mit waitFor() wartest du auf das Ende des Prozesses. Du hast keinen Thread, der x Sekunden wartet und dann versucht den Prozess zu beenden.
Du liest stdout und stderr erst hinterher aus, das ist zu spät. Wenn der Puffer für dieses Streams volläuft, ohne ausgelesen zu werden, blockiert der Prozess.
 

Bleistift

Mitglied
Java:
import java.io.*;
import java.util.*;
 
public class cProcess
{
    String strCommand = "";
	final long maxTimeToWait = 100000; //100 Sekunden
	public static boolean processRunning = false;
	static Process p;
 
    public void cProcess()
    {
        
    }
 
    public String execute(String strCommand)
    {
        this.strCommand = strCommand;
        String result = "";
        try
        {
			processRunning = true;
            p = Runtime.getRuntime().exec(this.strCommand);
            BufferedReader stdInput = new BufferedReader(new InputStreamReader(p.getInputStream()));
            BufferedReader stdError = new BufferedReader(new InputStreamReader(p.getErrorStream()));
			new Thread(new Runnable()
			{
				public void run()
				{
					try {
						cProcess.p.waitFor();
						cProcess.processRunning = false;
					} catch(InterruptedException ie) {
					}
				}
			}).start();
			long time = System.currentTimeMillis();
			
			while(processRunning == true)
			{
				if(time + maxTimeToWait < System.currentTimeMillis())
				{
					//Wartezeit um!
				} else
					Thread.sleep(500);
			}
			
            String strThisLine = "";
            while ((strThisLine = stdInput.readLine()) != null)
            {
                result = result + strThisLine + "\n";
            }
            while ((strThisLine = stdError.readLine()) != null)
            {
                result = result + strThisLine + "\n";
            }
            p.destroy();
        }
        catch (Exception e)
        {
            processRunning = false;
        }
        return result;
    }
}
Ich habe es leicht geändert, damit nach einer bestimmten maximalen Wartezeit abgebrochen werden kann. Ob es funktioniert weiß ich nicht, der Compiler spuckt aber keine Fehlermeldungen aus.
mfg Bleistift
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
B Input/Output Probleme beim Ausführen von Shell-Befehlen mit Java Allgemeine Java-Themen 28
S Shell Commands mit absolutem Pfad ausführen Allgemeine Java-Themen 2
D Shell Script mit Parametern Allgemeine Java-Themen 2
R Batch / Shell-Skript in Jar.Datei einbinden? Allgemeine Java-Themen 5
B UNIX Shell befehl über JavaCode ausführen Allgemeine Java-Themen 19
M Aufruf von Unix-Shell in Java Allgemeine Java-Themen 5
Semox "Gute" Rückgaben von bash Shell ausgeben Allgemeine Java-Themen 4
S Shell-Befehl: mail Allgemeine Java-Themen 6
I Problem beim Ausführen von Shell Commandos Allgemeine Java-Themen 3
D Java Anwendung in der Shell Allgemeine Java-Themen 5
T Shell befehle ausführen - wie? Allgemeine Java-Themen 2
K Shell Command Auslesen Allgemeine Java-Themen 3
S Überprüfen, ob ein Shell Befehl existiert! Allgemeine Java-Themen 4
G Windows Shell Umlaute Problem Allgemeine Java-Themen 19
D linux shell aus java öffnen Allgemeine Java-Themen 5
Ark Linux: Shell-Skript zum Kompileren und Starten Allgemeine Java-Themen 4
thE_29 Kontextmenü Shell Eintrag Allgemeine Java-Themen 35
C Shell in einer GUI erstellen Allgemeine Java-Themen 2
F Shell-Programme per Runtime.exec() starten und mehr? Allgemeine Java-Themen 4
M DOS-Shell kennt kein CP850!! Allgemeine Java-Themen 2
O Java via Korn-Shell Allgemeine Java-Themen 8
C shell befehl mit java ein- und auslesen Allgemeine Java-Themen 2
T Wert an laufenden Java-Prozess übergeben Allgemeine Java-Themen 10
J Warten bis cmd Prozess fertig ist Allgemeine Java-Themen 2
L Prozess automatisch beenden Allgemeine Java-Themen 8
R PIPE Kommunikation mit Prozess blockiert Allgemeine Java-Themen 0
L Java Web Start - generierter Prozess Allgemeine Java-Themen 4
Tom299 Beliebiges Windows-Programm / Prozess in den Vordergrund bringen Allgemeine Java-Themen 4
A Linux: Native Library mit Rootrechten ohne Prozess mit sudo zu starten Allgemeine Java-Themen 1
K Problem: Java-Klasse mit mehreren Threads als eigenen Prozess starten Allgemeine Java-Themen 3
Thallius Neuen Prozess starten, der auch nach Beedingung des Starter-Prozesses weiterläuft? Allgemeine Java-Themen 5
B Erkennen, wann Prozess beendet ist, dann Thread beenden. Allgemeine Java-Themen 6
D Grafisches Frontend zu einem Java Prozess erstellen Allgemeine Java-Themen 0
D neuen Prozess starten und anwendung beenden. Allgemeine Java-Themen 3
L Java Prozess 100% -> Analyse Allgemeine Java-Themen 2
P Scanner als Inputstream für Java Prozess Allgemeine Java-Themen 4
J Aktuellen Prozess herausfinden. Allgemeine Java-Themen 3
GUI-Programmer Prozess eine Bezeichnung geben Allgemeine Java-Themen 3
M Einen Prozess "crashen" lassen Allgemeine Java-Themen 9
I %AppData% Variable für einen Prozess setzen Allgemeine Java-Themen 23
E externen Prozess schließen, wenn Programm geschlossen wird Allgemeine Java-Themen 2
S Prozess der von anderem Prozess gestartet wurde beenden? (Windows Bildschirmtastatur) Allgemeine Java-Themen 4
Nicer Prozess über Prozessnamen beenden Allgemeine Java-Themen 15
K Prozess starten, überwachen und beenden Allgemeine Java-Themen 4
O Wie laufenden Prozess einfangen? Allgemeine Java-Themen 7
X Prozess-Objekt nach Ausführung der destroy-Methode null oder nicht null ? Allgemeine Java-Themen 10
0din Prozess einer .jar umbenennen Allgemeine Java-Themen 7
data89 Java als Boot-Prozess/Daemon? Allgemeine Java-Themen 6
reibi Kill eines Java-Prozesses und Stop-Prozess Allgemeine Java-Themen 3
T In der JVM einen weiteren, unabhängigen Prozess starten Allgemeine Java-Themen 11
G Runtime.exec - Prozess "mittendrin" "einfach Allgemeine Java-Themen 4
Y ProcessBuilder, Prozess wird gestartet, aber Anwendung nicht Allgemeine Java-Themen 5
M String an externen Prozess senden/auslesen Allgemeine Java-Themen 25
T Prozess beenden Allgemeine Java-Themen 3
J Zweiter Prozess der alle x Sekunden etwas abfragen soll Allgemeine Java-Themen 2
G Prozess direkt starten beim Start des Appservers Allgemeine Java-Themen 3
G Prozess-Status Allgemeine Java-Themen 8
H Kommunikation mit einem c-Prozess funzt nicht richtig Allgemeine Java-Themen 5
L Zugriff auf anderen Prozess der VM Allgemeine Java-Themen 9
C nur einen Prozess eines Programmes erlauben Allgemeine Java-Themen 8
S was passiert bei diesem filereader prozess Allgemeine Java-Themen 2
A Java Prozess in neuer JVM Allgemeine Java-Themen 8
K Prozess-Visualisierung: Stichwörter gesucht Allgemeine Java-Themen 4
D runtime.exec --> Prozess hängt sich auf Allgemeine Java-Themen 7
S Prozess javaw.exe läuft immer noch, obwohl Programm beendet Allgemeine Java-Themen 6
M Thread als eigenständiger Linux Prozess mit PID Allgemeine Java-Themen 8
clemente Swing Applikation killt kwin Prozess (unter Linux / KDE) Allgemeine Java-Themen 3
M Zweiten Prozess in Java starten! Allgemeine Java-Themen 5
R Kontrolle über Externe Prozess Allgemeine Java-Themen 5
G Prozess beenden, wenn er hängt Allgemeine Java-Themen 9
S Wie eine Anwendung als neuer Prozess starten? Allgemeine Java-Themen 8
P wie beende ich einen prozess? Allgemeine Java-Themen 3
S blockierenden Prozess stoppen Allgemeine Java-Themen 13
S Java Programm lässt sich vom USB-Stick starten, aber nicht von HDD Allgemeine Java-Themen 16
Kiki01 Häufigster Buchstabe lässt sich nicht ermitteln Allgemeine Java-Themen 30
T Projekt baut nicht mehr/lässt sich nicht mehr ausführen Allgemeine Java-Themen 6
O Jar lässt sich auf bestimmten Pc nicht starten Allgemeine Java-Themen 18
M String lässt sich nicht Zusammenfügen Allgemeine Java-Themen 10
T Login lässt App crashen! Allgemeine Java-Themen 14
G Jar lässt sich mit macOS nicht starten Allgemeine Java-Themen 9
S Compiler-Fehler IntelliJ Projektdatei lässt sich nicht erstellen. Allgemeine Java-Themen 15
E GUI.jfm lässt sich nicht mehr öffnen Allgemeine Java-Themen 1
K jar-Datei lässt sich unter Windows nicht verwenden Allgemeine Java-Themen 3
L Jar lässt sich nicht öffnen Allgemeine Java-Themen 12
C .jar File lässt sich nur über Konsole öffnen Allgemeine Java-Themen 1
K Java lässt sich nicht Installieren Windows7Ultimate 64Bit Allgemeine Java-Themen 1
L Garbage Collector lässt Programm kurz hängen Allgemeine Java-Themen 10
D swingset3.jnlp lässt sich nicht ausführen Allgemeine Java-Themen 2
F Spiel lässt sich nicht aus GUI starten Allgemeine Java-Themen 5
J setUndecorated lässt GUI "spacken" Allgemeine Java-Themen 52
R Windows-Firewall lässt Java nicht durch Allgemeine Java-Themen 17
N Java lässt sich nicht löschen! Allgemeine Java-Themen 7
D Java Excel API - Schreiben in Excel lässt sich nicht über Makro starten Allgemeine Java-Themen 18
P jar-Datei lässt sich nicht ausführen Allgemeine Java-Themen 5
J Java programm lässt sich in win7 nach linux install nicht mehr ausführen Allgemeine Java-Themen 18
D JMF - lässt sich nicht im ausgewählten Format aufnehmen Allgemeine Java-Themen 2
M Java lässt sich nicht installieren Allgemeine Java-Themen 10
J pack() lässt JFrame grau Allgemeine Java-Themen 3
V JRE lässt sich nicht installieren. Allgemeine Java-Themen 10
L JDK lässt sich nicht deinstallieren Allgemeine Java-Themen 3

Ähnliche Java Themen

Neue Themen


Oben