通过Java代码检查进程是否在linux上运行

通过Java代码检查进程是否在linux上运行,java,linux,Java,Linux,问题是我只想在进程运行时终止它,否则我想做其他事情 这是我现在的代码(以升华为例): Runtime.getRuntime().exec(“pidof sublime_text”)总是返回一个进程,即使这个进程不存在,我的意思是,我可以执行:Runtime.getRuntime().exec(“pidof nonExistingProcess”)这仍然会返回一个没有错误的进程,然后是kill“pkill”命令 Runtime.getRuntime().exec(“pkill-f不存在进程”)也不

问题是我只想在进程运行时终止它,否则我想做其他事情

这是我现在的代码(以升华为例):

Runtime.getRuntime().exec(“pidof sublime_text”)
总是返回一个进程,即使这个进程不存在,我的意思是,我可以执行:
Runtime.getRuntime().exec(“pidof nonExistingProcess”)
这仍然会返回一个没有错误的进程,然后是kill“pkill”命令
Runtime.getRuntime().exec(“pkill-f不存在进程”)也不会抛出异常,我能做什么?

当然有一个进程;'pidof someRandomGarbage’仍然是一个运行的应用程序。应用程序在运行时返回“nope”,这一事实并不会神奇地使进程消失。您必须使用
进程
类的方法来确定运行
pidof someRandomGarbage
的结果
p.exitValue()
可能就是您想要的。要确定实际输出,必须使用
p.getInputStream()


请注意,使用相对路径是一个非常糟糕的想法;这意味着您依赖于PATH变量和java对其进行正确解析。请尝试
/usr/bin/pkill
或其他可配置的方法。

您正在启动进程,但没有读取其输出或返回状态(甚至没有等待它们完成),因此您的代码实际上不会对启动的进程做出任何反应

您可以在PHP或类似系统中使用
system
,在这些系统中,该调用仅在执行的命令完成后返回。与此不同的是,您启动流程,但由您从返回的中读取其输出


所以
p
实际上并不代表崇高,但它是一个执行
pidof
的过程,您必须读取它的输出以获得您想要的信息。

可能重复的哦,等等,它起作用了。
try {
    Process p = Runtime.getRuntime().exec("pidof sublime_text");

    if (p != null){
        Runtime.getRuntime().exec("pkill -f sublime");
    }
}
catch (Exception e) {
    System.out.println(e.getMessage());
}