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.
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();}
}
...........................
}