如何在java中获得进程id?

如何在java中获得进程id?,java,process,terminal,Java,Process,Terminal,我正试图找到一种编程的方法来打开和关闭一个应用程序。我可以使用 Runtime.getRuntime().exec(new String[] {"open", "<path to application>"}); Runtime.getRuntime().exec(新字符串[]{“打开”,“”}); 然而,我能找到的唯一关闭它的方法是使用线路 Runtime.getRuntime().exec(new String[] {"kill", "<process id#>

我正试图找到一种编程的方法来打开和关闭一个应用程序。我可以使用

 Runtime.getRuntime().exec(new String[] {"open", "<path to application>"});
Runtime.getRuntime().exec(新字符串[]{“打开”,“”});
然而,我能找到的唯一关闭它的方法是使用线路

 Runtime.getRuntime().exec(new String[] {"kill", "<process id#>"});
Runtime.getRuntime().exec(新字符串[]{kill',“”});
除了手动打开终端并使用top查找#之外,我找不到其他方法来获取id。如果有一个程序化的方法来获取这个id,或者有一个更好的方法来打开和关闭应用程序,我很想听听


谢谢

使用启动子流程。返回的对象有一个
destroy()
方法,可以让您杀死它。

这可能与原始海报无关(由于经过的时间),但只是为了完整性

通过
exec(…)
命令,可以获得流程对象的句柄:

Process myProcess = Runtime.getRuntime().exec("mybin");
然后,您可以在以后的任何时候使用
destroy()


注意:这可能与Jim所描述的类似,但没有使用
ProcessBuilder

这可以很好地启动应用程序,但在我调用destroy()之后它会继续运行。子进程是否会捕获并忽略信号?(根据你最初问题的措辞,我假设你是在*nix上,而不是在Windows上)。另外,您在子流程中运行什么?
ProcessBuilder
已经存在很长时间了。除非你有充分的理由不这样做,否则就使用它。@AndrewThompson你确实是对的;-)
getRuntime().exec()
是我过去使用过的,我知道它可以工作,但作为一般规则,
ProcessBuilder
是一种方法。
myProcess.destroy();