commons-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Siegfried Goeschl <sgoes...@gmx.at>
Subject Re: [commons-exec] Watchdog
Date Wed, 23 Apr 2008 08:35:59 GMT
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: user-unsubscribe@commons.apache.org
> For additional commands, e-mail: user-help@commons.apache.org
>
>
>

---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@commons.apache.org
For additional commands, e-mail: user-help@commons.apache.org


Mime
View raw message