Processbuilder mit timeout

Stiffler66

Grünschnabel
Hallo zusammen hab mal wieder eine frage und denke das die wirklich oft gestellt wird in verbindung mit dem Processbuilder.

wie kann ich einem Processbuilder einen Timeout geben.
Habe scripte die ausgeführt werden über einen Process, nun soll allerdings nur 50 sekunden auf diesen proCess gewartet werden.hat er länger als 50 sekunden keine rückmeldung gegeben so soll er den aktiven abbrechen.

Code:
 public synchronized int executeFile(File f)
 {
    .........................
 
            p=new ProcessBuilder(f.getAbsolutePath());
        System.out.println(f.getName());
        Process pro=null;
        InputStream es=null;
        InputStreamReader ir=null;
        try 
        {
            StringBuilder builder = new StringBuilder();
            pro = p.start();
            try 
            {
                pro.waitFor();
                pro.destroy();      //hier ein Timeout 50 sekunden
            } 
            catch (InterruptedException e){e.printStackTrace(); return 0;}
            if(pro.exitValue()==1)
            {
                .......
            }
            else 
            {
                ........
            }
            es = pro.getErrorStream();
            System.out.println("ES="+es);
            ir = new InputStreamReader(es);
            char[] buf = new char[1024];
            int i=0;
            while((i=ir.read(buf))!=-1)
            {
            builder.append(buf,0,i);
            }
        } 
        catch (IOException e) 
            {
                 ..........................
            }
        finally
        {
                if(pro!=null)pro.destroy();
                try {
                if(pro!=null)pro.waitFor();
                } catch (InterruptedException e1) {e1.printStackTrace();}
                if(f!=null || f.exists())f.deleteOnExit();
    
                try 
                {
                    if(ir!=null)ir.close();
                    if(es!=null)es.close();
                } catch (IOException e) {e.printStackTrace();}
            
        }
       ...........................
 }
 
@cow
Verstehe leider nicht was daran falsch sein sollte auch in ein anderes Forum die selbe frage zu stellen, wenn ich in einem Forum keine Antwort bekomme dann versuche ich es auch wo anders.Wenn du mir behilflich wärst wäre es auch nicht nötig gewäsen wo anders nachzufragen;)

@vfl
Danke erstmal
Eigentlich funktioniert alles, allerdings wollte ich den Fehler abfangen, dass ein Process länger als 20 sekunden braucht.
Dieser soll dann abgebrochen werden und 0 zurück geben.
leider hab ich bisher kein Process der länger als 20 sekunden dauert :) , aber will auch diesen Fehler abgefangen haben, für den Fall das er auftritt

Gruß
 
@cow
Verstehe leider nicht was daran falsch sein sollte auch in ein anderes Forum die selbe frage zu stellen, wenn ich in einem Forum keine Antwort bekomme dann versuche ich es auch wo anders.Wenn du mir behilflich wärst wäre es auch nicht nötig gewäsen wo anders nachzufragen;)
Das Problem verstehe ich allerdings auch nicht .... :p

@vfl
Danke erstmal
Eigentlich funktioniert alles, allerdings wollte ich den Fehler abfangen, dass ein Process länger als 20 sekunden braucht.
Dieser soll dann abgebrochen werden und 0 zurück geben.
leider hab ich bisher kein Process der länger als 20 sekunden dauert :) , aber will auch diesen Fehler abgefangen haben, für den Fall das er auftritt
Du könntest doch zum Testen einfach Prozesse abbrechen, die länger als ... sagen wir mal: 2 Sekunden dauern, oder

Gruß
Klaus
 
Ja, aber wie frage ich nach ob er länger als 2 sekunden gebraucht hat?
Eine idee wäre es nach process.start() den aktuellen Thread 2 sekunden schlafen zulegen und danach den process zu beenden.aber wie sinnvoll das ist weiss ich nicht.
Meine frage wäre eigentlich ob es da nicht eine funktion gibt mit der man einen Timeout setzen kann.
 
Zurück