为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

猛跑小猪 2021-10-28 14:45:44
问题是我只想在进程运行时杀死它,否则我想做其他事情。这是我现在的代码(以 sublime 为例):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());}Runtime.getRuntime().exec("pidof sublime_text");总是返回一个进程,即使这个进程不存在,我的意思是,我可以执行:Runtime.getRuntime().exec("pidof nonExistingProcess");这仍然会返回一个没有错误的进程,然后kill“pkill”命令 Runtime.getRuntime().exec("pkill -f nonExistingProcess");也不会抛出异常,我能做什么做?
查看完整描述

2 回答

?
杨__羊羊

TA贡献1943条经验 获得超7个赞

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

您可能习惯于system在 PHP 或类似系统中,该调用仅在执行的命令完成后才返回。Runtime.exec()不同之处在于您开始该过程,但由您来读取它从Process返回的输出中的输出。

所以p实际上并不代表崇高,但它是正在执行的过程pidof,您必须阅读其输出才能获得所需的信息。


查看完整回答
反对 回复 2021-10-28
?
白猪掌柜的

TA贡献1893条经验 获得超10个赞

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

请注意,使用相对路径是一个非常糟糕的主意;这意味着您依赖于 PATH 变量java 正确解析它。尝试/usr/bin/pkill,或可配置的东西。


查看完整回答
反对 回复 2021-10-28
  • 2 回答
  • 0 关注
  • 253 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信