日期:2014-05-20  浏览次数:21055 次

关于用Runtime.getRuntime().exec(cmd)等待一段时间后强制结束的问题
本人项目中有个java程序(A),需要调用另一个shell script(B),在B中又去执行一个C++程序.out文件(C),如果C运行正常,会通过B向A传回一个返回码。现在的问题是C程序中如果存在死循环,B执行不完,A也拿不到返回码,程序没反应。现在希望在A程序中等待一段时间后如果没有返回直接结束进程,不知如何实现,望哪位高手指点一下,感激不尽。谢谢!


A程序中执行B采用的方法是:

Process proc=Runtime.getRuntime().exec(cmd); //调用这个shell script(B)
proc.waitFor(); 
rescode=proc.exitValue();

------解决方案--------------------
写一个线程,过了一段时间如果A没结束就调用kill去杀死C或者B
------解决方案--------------------
Process proc=Runtime.getRuntime().exec(cmd); //跟这个写法一样
用java调用kill
------解决方案--------------------
探讨
看到一句话:“当你在一个Process上调用waitFor方法时,当前线程是阻塞的,如果外部命令无法执行结束,那么你的线程就会一直阻塞下去,这种意外会影响我们程序的执行。所以在我们不能判断外部命令什么时候执行完毕而我们的程序还需要继续执行的情况下,我们就应该循环的使用exitValue来取得外部命令的返回状态,并在外部命令返回时作出相应的处理。 ”其中的“应该循环的使用exitValue来取得外部……