关于Process的waitFor方法,程序一直阻塞的原因

Super_Ninja 2014-11-20 05:52:13
先直接看我的demo
public static void main(String[] args) {
String cmd = geneCmd();
Process pro;
try {
System.out.println("begin process");
pro = Runtime.getRuntime().exec(cmd);
int waitTime = pro.waitFor();
System.out.println(waitTime);
System.out.println("end process");
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}

static String geneCmd(){
String str = "ls -l\n";
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 1000; i++) {
sb.append(str);
}
return sb.toString();
}

如果我把上面的geneCmd循环1000次的话,线程会处于一直等待状态,一直没有结束,如果循环次数减少,会很快结束掉。
看了以下api的说明,该方法"方法将导致当前的线程等待,如果必要的话,直到由该Process对象表示的进程已经终止。此方法将立即返回,如果子进程已经终止。如果子进程尚未终止,则调用线程将被阻塞,直到子进程退出。" 现在的问题是执行这个cmd命令,怎么会一直没有执行完,程序始终没有结束,貌似卡死的样子。
...全文
742 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
injuer 2014-11-24
  • 打赏
  • 举报
回复
http://blog.csdn.net/injuer/article/details/6387731

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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