java - tomcat运行shell脚本并将进程返回给系统

标签 java linux shell tomcat glassfish

我有一些脚本,它们有自己的工作,必须不断循环运行。我设法在 java servlet 中启动 shell 脚本。而 Servlet 运行在 Tomcat 上。然而,当我杀死服务器(它是为了测试)时,所有正在运行的 shell 脚本都死了,没有进程可以再被 grepped。

另外,因此,我必须将我的服务器更改为 Glassfish。事实证明,即使我杀死了 Glassfish,由在 Glassfish 中运行的应用程序启动的进程仍然存在!!!这很令人困惑,因为我认为它们应该是相同的结果。就其广泛使用和更快的管理控制台而言,tomcat 是首选。

有谁知道如何将启动的进程返回到tomcat中的shell。我不知道问题出在哪里。 我启动脚本的代码是:

ProcessBuilder pb= new ProcessBuilder("/bin/bash", "scriptDir/" + "xx.sh");
pb.start ;

通常我可以立即从终端获取 PID。一旦 tomcat 被杀死,它们也会消失。

最佳答案

我做了以下测试:

案例 1:

  1. 在 tomcat 上启动应用程序
  2. 启动所有脚本
  3. grep 以确保所有进程都已启动
  4. 杀死tomcat并再次grep

result: all process die

案例 2:

  1. 在 glassfish 上启动应用
  2. 启动所有脚本
  3. grep 以确保所有进程都开始
  4. 杀死 glassfish 并再次 grep

结果:所有进程保持存活

案例3:

  1. 在 tomcat 上启动应用
  2. 在 glassfish(另一个端口)上启动应用
  3. 在tomcat上使用app启动所有脚本
  4. 确定 grep

3-1

  1. 杀死 Tomcat
  2. 再次grep

结果:所有进程保持存活

  1. 然后杀死 Glassfish

结果:所有进程仍然存在

3-2

  1. 杀死 Glassfish
  2. 再次grep

结果:所有进程保持存活

  1. 杀死 Tomcat

result: all process die

所以我认为 glassfish 是我的唯一选择。可能是 tomcat 和 glassfish 在终止期间具有不同的机制。 Tomcat 似乎杀死了所有分层子进程,而 glassfish 忽略了它们。

关于java - tomcat运行shell脚本并将进程返回给系统,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29347566/

相关文章:

java - 使用 Mockito 模拟新对象创建

java - 为什么在 Google App Engine 项目中找不到图像(Java,不使用 GWT)

java - Transport.send(msg) 不起作用

java - 有时数据包只有在进程结束后才传输? [Java]

Linux 脚本不起作用

shell - 如何使用 awk 打印具有特定模式的开始和结束标记之间的记录?

shell - 如何在 clozure cl 中杀死一组进程?

java - 如何在 Ubuntu Linux 启动时运行 Java 应用程序

以点开头的 Linux 目录

Linux : launch a specific action when another process is terminated