我需要能够使用java杀死linux进程。我已经使用了下面的命令,但似乎我没有权限来终止进程,即使进程是同一个用户。我也试过用sudo运行应用程序ie。 “sudo java -jar appname.jar”
private static void forceKillRunningProcess() throws Exception{
//Runtime.getRuntime().exec("sudo pkill -f 'application.jar'");
ProcessBuilder pb = new ProcessBuilder("sudo","pkill","-f", "\"application.jar\"");
pb.start();
}
上述命令在CLI中有效但在java中无效。有工作吗?
答案 0 :(得分:1)
如果过程是"外部" (它不是从您的Java应用程序启动的 - 即:通过ProcessBuilder.start())然后您无法使用该命令将其杀死。
另一方面,您可以尝试:Runtime.exec(" pkill -f' application.jar'"); 但是你的Java应用程序只能在具有pkill二进制文件的Unix环境中运行 - 因此不能独立于平台。
答案 1 :(得分:1)
我想问题是sudo - 通常当我们从终端尝试这样的命令时,它会立即提示我们输入密码,这在发布的代码中没有发生。下面的代码可以工作,但是如果我在kill语句中添加sudo,那就不行了。
package com.test;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class KillApp {
public static void main(String[] args) {
try {
Process pr = Runtime.getRuntime().exec("pidof chrome");
BufferedReader read = new BufferedReader(new InputStreamReader(
pr.getInputStream()));
String str = read.readLine();
System.out.println("Process id(s) to kill: " + str);
pr = Runtime.getRuntime().exec("kill -9 " + str);
System.out.println("done");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}