如何知道*nix上Java代码(或C或Python)中的启动和终止进程
我需要在Linux上编写一个进程控制器模块来处理任务,每个任务都由多个可执行文件组成。控制器的输入是一个XML文件,其中包含每个可执行文件的路径以及要传递给每个可执行文件的命令行参数列表。我需要实现以下功能:如何知道*nix上Java代码(或C或Python)中的启动和终止进程,java,linux,process,Java,Linux,Process,我需要在Linux上编写一个进程控制器模块来处理任务,每个任务都由多个可执行文件组成。控制器的输入是一个XML文件,其中包含每个可执行文件的路径以及要传递给每个可执行文件的命令行参数列表。我需要实现以下功能: 将每个可执行文件作为独立进程启动 能够独立于其他进程杀死创建的任何子进程 为了执行(2),我想我需要在创建进程时捕获pid,以发出系统kill命令。我试图使用ProcessBuilder在Java中访问pid,但没有找到简单的方法 我的其他逻辑(把任务信息用DB等)用java完成,所以我想
pid
,以发出系统kill
命令。我试图使用ProcessBuilder
在Java中访问pid
,但没有找到简单的方法
我的其他逻辑(把任务信息用DB等)用java完成,所以我想坚持下去,但是如果有C++、C++或Python的解决方案,我也会喜欢的。
< P>你真的需要在谷歌上查找“shell脚本”。特别是如果您的雇主/讲师希望您在linux上工作并处理流程等问题 也许从这里开始:对于Java解决方案,您应该查看库。他们已经做了很多工作,使其独立于平台,他们有一个伟大的
在python中,可以使用包含的库 我不确定,但是如果您从Java启动可执行文件,您可以在单独的线程中启动它们,然后您可以根据自己的需要映射它们—通过名称、行号或其他方式—并以Java线程的形式定期停止封闭线程,这似乎不是一个优雅的解决方案(不关闭文件等),但可以在一定程度上工作(只要linux程序不启动进程,这将使自己从其父进程中解脱出来) 用于关闭每个进程的特定命令(通过stdin发送到程序)可能是另一种选择。这里详细介绍了如何处理stdin和stdout以及其他陷阱: ? 可见程序甚至可以由java.awt.Robot(键盘、鼠标)控制
作为最后一个想法,我会考虑使用一个新的命令“杀死PIDof程序”,它以名称为基础工作,所以不能区分同一进程的两个实例。
我不知道Steen提到的apache库,但通常有非常有用的东西,我建议你也去看看——也许是在第一个地方。@user314967:不要因为你是新手而对你投反对票,但你的答案根本不能回答问题。如果你认为应该使用shell脚本而不是Java(这在你的回答中是不清楚的),然后做一个评论。关于SO的答案应该,嗯,回答OP的问题。哦,答案是“Google是你的朋友”这是一个寻找答案的地方,而不是答案的链接。想知道是谁对这个问题投了更高的票吗?基本上,海报要求的是一个外壳,但由于他可能从未在windows之外的任何东西上工作过,他不知道这样一个怪兽的存在。因此,这是一个荒谬的Java/XML起点。@chetan-你可能是对的,你可能是对的没错。为什么不询问OP并提供替代方案,而不是编辑?@chetan-实际上你错了:-)我不想用我们的系统架构的令人痛苦的细节(为什么我们需要XML列表过程,等等)来解决这个问题因为我不认为这些是相关的。但是,如果你介意的话,我在这里谈论的是一个模块,它处理任务描述(XML)并控制组件进程。他们网站上的第一句话就说明了这一点:“从Java执行外部进程是一个众所周知的问题领域。”事实上!看起来非常有希望,谢谢!