问题是我只想在进程运行时杀死它,否则我想做其他事情。这是我现在的代码(以 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
,您必须阅读其输出才能获得所需的信息。
白猪掌柜的
TA贡献1893条经验 获得超10个赞
当然有一个过程;'pidof someRandomGarbage' 仍然是一个运行的应用程序。应用程序在运行时返回“nope”这一事实并不会神奇地使进程消失。您必须使用Process
类的方法来确定运行的结果pidof someRandomGarbage
。p.exitValue()
可能就是你要找的。要确定您必须使用的实际输出p.getInputStream()
。
请注意,使用相对路径是一个非常糟糕的主意;这意味着您依赖于 PATH 变量和java 正确解析它。尝试/usr/bin/pkill
,或可配置的东西。
添加回答
举报
0/150
提交
取消