在Windows XP中停止Java进程的策略

时间:2010-09-30 23:27:14

标签: java scripting command-line windows-xp batch-file

我正在使用一个由大约10个Java进程组成的应用程序,这些进程通过JINI,JMS,套接字和在Windows XP上运行的HSQL数据库进行通信。

应用程序的每个部分似乎都有自己的.bat文件。例如,有:

  • ActiveMQ Broker
  • HSQL服务器
  • JINICore服务
  • RMI Registry
  • 5个运行的Java主电源
  • 1 Java GUI

这是一个截图,所以你可以看到我正在处理的疯狂:

我想弄清楚的是如何使用一个脚本或命令或使用某种类型的Java库来停止所有这些进程。我不想强迫用户必须关闭10个命令窗口。

有关处理此事的任何想法吗?

6 个答案:

答案 0 :(得分:4)

这看起来像真的糟糕的设计。处理混乱有几种选择:

计划A:将所有内容组合在一起作为一个应用程序并让它在同一个JVM中运行 - 启动器类可以将每个现在单独的进程作为一个简单的线程运行。如果应用程序没有做任何非常恶劣的事情,它们应该能够在一个JVM中共存。

计划B:让每个单独的JVM创建一个ServerSocket并通过他们应该关闭的套接字向他们发送消息。

计划C:获取ProcessView(http://www.teamcti.com/pview/prcview.htm),可以从命令行运行并按名称杀死进程(使用通配符),这样就可以杀死所有java流程一气呵成。它是一个大锤解决方案,但可能适合您的短期需求。

答案 1 :(得分:3)

这就是应用程序服务器的用途。他们面临类似的问题,提供他们所有的服务,必须按照特定的顺序进行调整和拆解,以保持依赖性。

例如,您可以使用JBoss微内核,它不仅仅是一些类加载器和JMX引擎。您可以将应用程序打包为“sar”或服务存档,并在这些包的元数据中指定依赖项。

您可以使用剥离的glassfish或使用Spring DM服务器执行类似的操作。

或者像Equinox或Felix这样的OSGi引擎可以提供类似的服务。

另一个优点是,您最终将减少更少的虚拟机。

答案 2 :(得分:3)

这个答案有点中等/长期解决方案,但你应该真正考虑从图片中获取自定义.bat文件,并使用Tanuki Java Service Wrapper来获取所有长期内容将java进程安装为具有特定名称的Windows服务。从那里开始,创建一个.bat脚本很容易,该脚本包含启动和启动net start %SERVICE_NAME%net stop %SERVICE_NAME命令所需的所有java进程。

Tanuki包装器有一个社区版本,可以免费用于基本功能,包括安装为Windows服务。

答案 3 :(得分:3)

阅读taskkill命令帮助:taskkill /?

TASKKILL [/S sistema [/U nomeutente [/P [password]]]]
         { [/FI filtro] [/PID idprocesso | /IM nomeimmagine] } [/T] [/F]

您可以在知道PID或其名称的情况下杀死任务。

答案 4 :(得分:2)

如果您的非合作终止可以,那么,因为这是在Windows上,所以TerminateJobObject可能正是您正在寻找的。它终止了“工作”中的所有进程。当然,进程必须首先与作业相关联(请参阅MSDN Lib链接)。

免责声明:我没有使用它。

干杯&第h。,

- Alf

答案 5 :(得分:0)

除非您拥有之前提到的应用服务器或其他框架,否则您可以执行以下操作之一。你能找到这些过程的pid吗?如果是这样,您可以尝试向它们发送信号(对于* nix系统)。如果你可以控制这些java进程的代码,你可以让它们监听tcp套接字;创建一个简单的消息,告诉进程自行关闭。基本上这是IPC的情况。