Ubuntu Java: найдите pid определенной программы и убейте ее - PullRequest
5 голосов
/ 14 октября 2011

Я пытаюсь создать приложение, которое проверяет, запущено ли это конкретное приложение, а затем завершить его через указанное время. Я планирую получить pid приложения. Как я могу получить pid приложения?

Спасибо

Ответы [ 8 ]

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

Вы можете попробовать ps -aux | grep foobar для получения pid, затем выполнить команду kill против него, или вы можете использовать pkillfoobar,в обоих случаях foobar является именем приложения, которое вы хотите прекратить.

5 голосов
/ 14 октября 2011

pid для процессов Java -e.g ps -aux | grep java | awk '{print $2}'.

Вы также можете позвонить jps, чтобы получить список процессов. Недостатком этого является то, что он покажет вам только процессы для пользователя, выполняющего команду jps.

3 голосов
/ 28 октября 2012

Как насчет этого?

public static void killAll(String process) {
    try {
        Vector<String> commands = new Vector<String>();
        commands.add("pidof");
        commands.add(process);
        ProcessBuilder pb = new ProcessBuilder(commands);
        Process pr = pb.start();
        pr.waitFor();
        if (pr.exitValue() != 0) return;
        BufferedReader outReader = new BufferedReader(new InputStreamReader(pr.getInputStream()));
        for (String pid : outReader.readLine().trim().split(" ")) {
            log.info("Killing pid: "+pid);
            Runtime.getRuntime().exec("kill " + pid).waitFor();
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
}
}
3 голосов
/ 14 октября 2011

вы можете использовать pidof, чтобы получить pid вашего приложения

pidof <application name>

1 голос
/ 14 октября 2011

ps aux | awk '/java/ {print "sleep 10; kill "$2}' | bash

в Ubuntu, ps -aux выдает синтаксическую ошибку, где ps aux работает.

вывод передается по каналу awk, который сопоставляет строки с Java и спит в течение 10 секунд, а затем убивает программу с помощью pId. обратите внимание на трубу, чтобы bash. Не стесняйтесь указывать сколько хотите, или звоните на любые другие звонки, которые вы считаете уместными. Я заметил, что большинство других ответов пренебрегали, чтобы поймать часть квеста «по истечении определенного времени».

Вы также можете сделать это, позвонив по номеру pidof java | awk '{print "sleep 10; kill "$1}' | bash, но выбор за вами. Я обычно использую PS Aux.

1 голос
/ 14 октября 2011

Если вы запускаете это приложение из скрипта, вы можете получить pid последнего процесса, который был создан в фоновом режиме, используя специальную переменную $!, это значение вы можете сохранить в файле для последующего использования в функции отключения .

Ниже приведен пример:

nohup java -jar example.jar &
echo $! > application.pid
0 голосов
/ 20 апреля 2012

Найти pid процесса Java в Linux

, вы можете обратиться по этой ссылке ... он расскажет вам о поиске pid определенного имени класса

0 голосов
/ 14 октября 2011

Вам, вероятно, придется вызывать команды ps и kill Unix с помощью Runtime.exec и очищать их вывод. Я не думаю, что Java-программа может легко проверять / получать доступ к процессам, которые она не создавала.

...