Runtime 调用exec方法生成的子进程,如何关闭?

wzy9645 2003-10-15 11:34:17
如果用p.destroy()的话,我并不知是否已经执行结束了,这时关闭不合适
如果用waitFor()的话,出现了阻塞.

...全文
369 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
wzy9645 2003-10-15
  • 打赏
  • 举报
回复
读了,出现阻塞的情况,也就是读不出来控制台的输出.
exec执行的是数据库备份语句.
LoveRose 2003-10-15
  • 打赏
  • 举报
回复
如果用exec执行的子进程也是你自己写的话
可以在子进程运行完成后system.out.println()输出提示信息
然后在父进程中得到process.getInputStream()
读出字进程的输出
判断后调用p.destroy();
wzy9645 2003-10-15
  • 打赏
  • 举报
回复
上面是代码,
strCmd 如果是 dir 则正常
如果是备份语句 exp ....则无输出,进程也结束不了.
wzy9645 2003-10-15
  • 打赏
  • 举报
回复
Runtime sys=Runtime.getRuntime();
Process p=sys.exec("cmd.exe /c "+strCmd);


//得到命令返回数据
DataInputStream in=new DataInputStream(p.getInputStream());
BufferedReader reader=new BufferedReader(new InputStreamReader(in));

String line;
while((line=reader.readLine())!=null){
System.out.println(line);
}
reader.close();
in.close();

p.destroy();
wzy9645 2003-10-15
  • 打赏
  • 举报
回复
exec执行的是Oracle数据库备份语句.

不知为什么备份的反回语句的确取不到,不是标准输出吗?
okwuzhijun 2003-10-15
  • 打赏
  • 举报
回复
自生自灭
LoveRose 2003-10-15
  • 打赏
  • 举报
回复
小问题也搞定了
用while循环读就可以了
LoveRose 2003-10-15
  • 打赏
  • 举报
回复
这个问题着实把我郁闷了一把
我做了个测试程序,用我说的方法是可行的
我的子进程是一个dialog,包含一个button
button点击时打印over
在父进程中,得到子进程的输出,判断是over则p.destroy();
这样是可以的。

不过出现一点小问题
父进程得到流时,只能read到子进程的第一次输出。

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧