通过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());
}