本人项目中有个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程序中执行B采用的方法是:Process proc=Runtime.getRuntime().exec(cmd); //调用这个shell script(B)
proc.waitFor();
rescode=proc.exitValue();
解决方案 »
- 怎么用正则表达式得到绝对路径的文件名和路径名?
- 跪求一段APPLET程序 要点击按钮能够画正玄曲线 (作图也行)要使用EVENT哦 谢谢
- 线程间通信的问题
- 很简单的问题,请指教!!
- jdbc 问题请教:postgres 数据库 怎么察看有哪些已经建好的 shema ?
- 如何在FilenameFilter 的 accpet(File dir,String name)里面判断是否是一个目录?
- 我在if语句中判断,用到了class.forname,要写try catch语句怎么加阿
- 各位朋友帮我看看下面关于二维数组的程序段为何有问题?
- 一个很具体的问题,怎么在java的TreeView中使某个节点得到focus?散分。。
- jbuilder中的applet调试问题,在线等待,谢谢!
- Exception in thread "main" java.lang.NullPointerException at Server.main(Server.java:22)
- 如何求两个int型的最大值
用java调用kill
你在waitFor以前启动一个线程,并设置一个flag,线程等待一定时间,如果主线程执行waitFor结束则清空flag,线程到时间后判断flag,如果flag没有清空,说明主线程被卡住了,线程就调用kill去杀死B或C
long start_time;
start_time=System.currentTimeMillis();
rescode=5;
while((System.currentTimeMillis()-start_time)<15000)
{
try
{
rescode=proc.exitValue();
break;
}
catch(Exception e)
{
}
}
proc.destroy();基本上能实现功能,只是反应要比原来不用循环时慢了,这个循环真的会花费时间吗
for(i=0;i<20;i++)
{
long start_time=System.currentTimeMillis();
while((System.currentTimeMillis()-start_time)<500)
{}
try
{
rescode=proc.exitValue();
break;
}
catch(Exception e)
{
}
}