我有一些脚本,他们有自己的工作,必须继续无限循环运行。我设法在java servlet中启动shell脚本。 Servlet在Tomcat上运行。但是,当我杀死服务器(用于测试)时,所有正在运行的shell脚本都会死掉,不再有任何进程被渲染。
另外,因此,我必须将服务器更改为Glassfish。事实证明,即使我杀了Glassfish,这个过程也是由在Glassfish里面运行的应用程序开始的!这很令人困惑,因为我认为它们应该是相同的结果。并且tomcat在广泛使用和更快管理控制台方面是首选。
是否有人知道如何将已启动的进程返回到tomcat中的shell。我不知道问题出在哪里。 我启动脚本的代码是:
ProcessBuilder pb= new ProcessBuilder("/bin/bash", "scriptDir/" + "xx.sh");
pb.start ;
通常我可以立即从终端获得PID。一旦tomcat被杀死,其中的arll也会消失。
答案 0 :(得分:0)
我做了以下测试:
案例1:
结果:所有流程死亡
案例2:
结果:所有流程都保持活跃
案例3:
<强> 3-1 强>
结果:所有流程都保持活跃
结果:所有流程仍然存在
3-2
结果:所有流程都保持活跃
结果:所有流程死亡
所以我认为在我的情况下,玻璃鱼是唯一的选择。可能是tomcat和glassfish在终止期间有不同的机制。 Tomcat似乎杀死了所有分层子进程,而glassfish忽略了它们。