我读过几个关于如何从java执行外部程序的问题,例如:
使用带有多个参数的runtime.getruntime().exec
如何使用参数执行命令?
java:运行cmd命令(同时具有多个参数的多个命令)
可能还有几个,但建议的解决方案都不适合我。
代码:
public static void freezeAllChromeInstances() throws IOException, InterruptedException {
String[] freezeAllChromeInstances = {"/usr/bin/killall", "-STOP "
+ "\'Google Chrome\'"
+ "chromedriver-mod"
+ "\'Google Chrome Helper (Renderer)\'"
+ "\'Google Chrome Helper\'"
+ "\'Google Chrome Helper (GPU)\'"};
Runtime run = Runtime.getRuntime();
Process pr = run.exec(freezeAllChromeInstances);
Thread.sleep(1000);
pr.waitFor();
BufferedReader buf = new BufferedReader(new InputStreamReader(pr.getInputStream()));
String line = "";
while ((line=buf.readLine())!=null) {
System.out.println(line);
}
}
很容易理解:我想暂停一切。跑步 /usr/bin/killall -STOP 'Google Chrome' chromedriver-mod 'Google Chrome Helper (Renderer)' 'Google Chrome Helper' 'Google Chrome Helper (GPU)'
从命令行运行,但我上面的代码没有任何效果。
我试过使用一个字符串,一个字符串数组,不管是否转义撇号,组合 kill
以及 -STOP
一根绳子,以此类推。
你该怎么做?最好有一个最终的,对所有人都有效的解决方案。
更新:忘了提-我也试过了
ProcessBuilder pb = new ProcessBuilder("/usr/bin/killall", "-STOP "
+ "\'Google Chrome\'"
+ "chromedriver-mod"
+ "\'Google Chrome Helper (Renderer)\'"
+ "\'Google Chrome Helper\'"
+ "\'Google Chrome Helper (GPU)\'");
Process p = pb.start();
1条答案
按热度按时间xeufq47z1#
通过使用“+”而不是“,”将chrome进程名连接到一个没有空格的进程名。更改这个对我来说很有用(我添加了最后一个,因为这是我的ubuntu中进程的名称):
processbuilder版本也是如此-您还需要在那里创建一个字符串[]:
另外,我认为,如果您等待进程终止,就没有必要再睡一秒钟。它还可以帮助打印
getErrorStream()
输出也一样。