Hi Siegfried,
I found that bug to and I think it is here the case as I am starting the
processes with "cmd.exe /c ..."
Perhaps you have an idea how to solve that issue - at lease one could
remark in the documentation this kind of issue.
Tino
Siegfried Goeschl schrieb:
Hi Tino,
+) I have a look at it tonight ....
+) in general you won't be able to kill the 'ping' process anyway under
Windows - see
http://bugs.sun.com/bugdatabase/view_bug.do;:YfiG?bug_id=4770092
Cheers,
Siegfried Goeschl
Tino Schöllhorn wrote:
Hi,
I have a problem concerning commons-exec when using the timeouts with
a watchdog. The test-cases are running fine (Windows Vista, JDK 1.5.x)
I tried to simplify the usage of commons-exec because in our use-case
we often need a very simple case.
So I have a class ExecUtils which tries to hide the complexity of many
(necessary) details. It mainly has a static method
ExecUtils.exec(String cmd, int timeout) which should run an command in
a shell and terminate the command if necessary.
But - in my simple test-case the timout does not occur. What am I
missing?
I am glad for your help.
Cheers
Tino
----------------------
--- TEST
----------------------
public void testTimeoutCommand() {
System.out.println("*** testTimeoutCommand.begin");
// 100 Pings senden, aber nach 5 Sekunden abbrechen.
String cmd = "ping localhost -n 10000 -w 1000";
ExecUtils.Result r = ExecUtils.exec(cmd, 5000);
assertTrue("Es muss ein Timeout auftreten!",
r.hasTimeout());
System.err.println("result: " + r);
System.out.println("*** testTimeoutCommand.end");
}
----------------------
--- Code of ExecUtils
----------------------
public class ExecUtils {
public static class Result {
private String out;
private String err;
private int exitValue;
private boolean timeout;
private Exception exception;
public String getStdOut() {
return out;
}
public String getStdErr() {
return err;
}
public int getExitValue() {
return exitValue;
}
public boolean hasTimeout() {
return timeout;
}
public Exception getException() {
return exception;
}
}
public static Result exec(String cmdLine) {
return exec(cmdLine, Integer.MAX_VALUE);
}
public static Result exec(String cmdLine, int timeout) {
DefaultExecutor executor = new DefaultExecutor();
ExecuteWatchdog watchdog = new ExecuteWatchdog(timeout);
executor.setWatchdog(watchdog);
ByteArrayOutputStream baosOut = new
ByteArrayOutputStream();
ByteArrayOutputStream baosErr = new ByteArrayOutputStream();
PumpStreamHandler streamHandler = new
PumpStreamHandler(baosOut, baosErr);
//PumpStreamHandler streamHandler = new PumpStreamHandler();
executor.setStreamHandler(streamHandler);
// this is simplified
CommandLine commandLine = "cmd.exe /c " + cmdLine;
Result res = new Result();
try {
res.exitValue = executor.execute(commandLine);
} catch (Exception x) {
res.exception = x;
} finally {
res.out = new String(baosOut.toByteArray());
res.err = new String(baosErr.toByteArray());
res.timeout = watchdog.killedProcess();
}
return res;
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]