无法通过java应用程序向linux发送kill命令

时间:2015-04-13 16:30:21

标签: java linux

我需要能够使用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中无效。有工作吗?

2 个答案:

答案 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();
    }
}
}
相关问题