【问题标题】:How do you get a process id in java?你如何在java中获得进程ID?
【发布时间】:2011-06-03 19:52:53
【问题描述】:

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

轻松启动应用程序
 Runtime.getRuntime().exec(new String[] {"open", "<path to application>"});

但是,我能找到关闭它的唯一方法是使用这条线

 Runtime.getRuntime().exec(new String[] {"kill", "<process id#>"});

除了手动打开终端并使用 top 查找 # 之外,我无论如何都找不到获取 id #。如果有一种编程方式来获取这个 id,或者只是一种更好的方式来打开和关闭应用程序,我很想听听。

谢谢

【问题讨论】:

    标签: java process terminal


    【解决方案1】:

    使用java.lang.ProcessBuilder 启动子进程。返回的Process 对象有一个destroy() 方法,可以让你杀死它。

    【讨论】:

    • 这可以很好地启动应用程序,但在我调用 destroy() 后它会继续运行
    • 子进程是否捕获并忽略信号? (根据原始问题的措辞,我假设您使用的是 *nix 而不是 Windows)。另外,你在子进程中运行什么?
    【解决方案2】:

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

    您通过exec(...) 命令获得进程对象的句柄:

    Process myProcess = Runtime.getRuntime().exec("mybin");
    

    您可以在以后随时使用destroy() 杀死:

    myProcess.destroy();
    

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

    【讨论】:

    • ProcessBuilder 已经存在很长时间了。除非您有充分的理由这样做,否则请使用它。
    • @AndrewThompson 你确实是对的 ;-)。 getRuntime().exec() 是我过去使用的东西,我知道它可以工作,但 ProcessBuilder 是一般规则的方式。
    猜你喜欢
    • 2010-09-07
    • 2016-04-15
    • 2010-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-22
    • 1970-01-01
    相关资源
    最近更新 更多