получать все pid от pstree

1

Я пытаюсь получить все pid из pstree -pA <PID> в linux.
Я работаю в java и думал об этом с регулярным выражением. Я привел пример ниже:

eclipse(45905)---java(45906)-+-{java}(45907)  
                             |-{java}(45908)  
                             |-{java}(45909)  
                             |-{java}(45910)  
                             |-{java}(45911)  

Я написал следующий код:

private static Pattern PATTERN = Pattern.compile("\\d+");
static List<String> getPidsFromOutput(String output) {
    List<String> $ = Lists.newArrayList();
    List<String> list = Splitter.on(CharMatcher.anyOf("()\n")).splitToList(output);
    for (String string : list) {
        Matcher matcher = PATTERN.matcher(string);
        if (matcher.matches()) {
            $.add(string);
        }
    }
    return $ ;
}

Проблема заключается в том, что их имена (т.е. Исполняемый файл) являются числом. он также их поймает, и это будет ошибкой.

У вас есть какое-то предложение исправить это? или любое другое решение?

  • 0
    Каков ваш ожидаемый результат?
  • 0
    список номеров (pid's)
Показать ещё 3 комментария
Теги:

2 ответа

1
Лучший ответ

вы должны убедиться, что pid окружен фигурными скобками, кроме того, ваш код также захватывает потоки, чтобы избежать их, вы должны игнорировать процесс, который имеет {} вокруг его имени.

private static Pattern PATTERN = Pattern.compile(".*[^}]\\((\\d+)\\).*");

private Integer pid;
static Set<String> getPidsFromOutput(String output) {
    Set<String> $ = Sets.newHashSet();
    List<String> list = Splitter.on(CharMatcher.anyOf("\n")).splitToList(output);
    for (String line : list) {
        List<String> perProcess = Splitter.on(CharMatcher.anyOf("-")).splitToList(line);
        for (String p : perProcess) {
            Matcher matcher = PATTERN.matcher(p);
            if (matcher.matches()) {
                $.add(matcher.group(1));
            }
        }
    }
    log.info("pids from pstree: " + $);
    return $;
}
1

Найдите числа, которые окружены фигурными скобками \((\d+)\) так как имена процессов окружены фигурными фигурными скобками, он получит только PID

Ещё вопросы

Сообщество Overcoder
Наверх
Меню