我有一个具有最后一个语句System.out.println("Done");
的应用程序,它已被编写但在此之后程序仍在运行。我怎样才能检查它为什么运行?
可以使用System.exit(0)
吗?
该应用仅使用一个(主)线程。完成之后的所有事情都是:
System.out.println("Done.");
} catch (ClassNotFoundException | SQLException e) {
e.printStackTrace();
}
}
}
可能是数据库连接吗?
答案 0 :(得分:1)
当您认为程序已完成时生成线程转储并查看输出以查看当前执行的位置。您可能会发现它不在您期望的位置。
在Unix上,您应该能够使用kill -QUIT命令(其中pid是您的进程ID)来执行此操作。我相信在Windows上你可以使用Ctrl + Break来做同样的事情。
答案 1 :(得分:0)
我们遇到了类似的问题(尽管有Ruby测试系统)。
事实证明,我们运行已经从父进程分离的子进程,挂起等待某些东西,但仍然保持stdout打开,阻止我们的流监视循环终止,并使进程保持活动状态。
我通过运行' lsof'来找到问题。在显然已挂起的过程中,看到PIPE仍处于打开状态,并以更多的lsof跟踪这些过程。