Как мне получить PID порожденного Java-процесса - PullRequest
2 голосов
/ 20 октября 2011

Я пишу несколько java-программ, и мне нужно будет убить / очистить их в отдельной JVM после того, как я закончу с тем, что я хотел сделать.Для этого мне нужно получить PID процесса Java, который я создаю.

Ответы [ 3 ]

6 голосов
/ 20 октября 2011

jps -l работает как в Windows, так и в Unix. Вы можете вызвать эту команду из вашей Java-программы, используя Runtime.getRuntime().exec. Пример вывода jps -l выглядит следующим образом

9412 foo.bar.ClassName
9300 sun.tools.jps.Jps

Возможно, вам придется проанализировать это, а затем проверить полное имя и затем получить pid из соответствующей строки.

private static void executeJps() throws IOException {
    Process p = Runtime.getRuntime().exec("jps -l");
    String line = null;
    BufferedReader in = new BufferedReader(new InputStreamReader(
                                                p.getInputStream(), "UTF-8"));

    while ((line = in.readLine()) != null) {
        String [] javaProcess = line.split(" ");
        if (javaProcess.length > 1 && javaProcess[1].endsWith("ClassName")) {
            System.out.println("pid => " + javaProcess[0]);
            System.out.println("Fully Qualified Class Name => " + 
                                           javaProcess[1]);
        }
    }
}
0 голосов
/ 07 августа 2016

Обратите внимание, что в Java 9 появятся некоторые не зависящие от системы методы, такие как:

System.out.println("Your pid is " + Process.getCurrentPid());
0 голосов
/ 20 октября 2011

вы можете попробовать выполнить команду

pidof <program name>

чтобы вы нашли pid своей программы.

Это в Linux env.

...