Получение идентификатора процесса другой программы в Groovy с использованием «передачи команд»

import java.lang.management.*

final String name = ManagementFactory.getRuntimeMXBean().getName();
final Integer pid = Integer.parseInt(name[0..name.indexOf("@")-1])

Я попробовал это в своем коде, но получил pid работающей программы. Я запускаю спящий скрипт (все, что он делает, это спит) под названием sleep.sh, и я хочу получить его pid. Есть ли способ сделать это? Я не нашел очень хороший способ сам.

Я также использовал ps | grep, и я вижу идентификатор процесса, есть ли способ его вывести?

Process proc1 = 'ps -ef'.execute()
Process proc2 = 'grep sleep.sh'.execute()
Process proc3 = 'grep -v grep'.execute()
all = proc1 | proc2 | proc3

есть ли способ изменить all.text, чтобы получить идентификатор процесса, или есть другой способ получить его?


person Ian    schedule 29.05.2013    source источник
comment
нвм я ответил. Все равно дам лучший ответ, если вы хотите ответить на этот вопрос   -  person Ian    schedule 30.05.2013
comment
Если у вас есть решение, оно полностью приемлемо ответить на него ниже и принять его!   -  person OverZealous    schedule 31.05.2013


Ответы (1)


Object getNumber(String searchProc) {
        //adds the process in the method call to the grep command
        searchString = "grep "+searchProc

        // initializes the command and pipes them together
        Process proc1 = 'ps -ef'.execute()
        Process proc2 = searchString.execute()
        Process proc3 = 'grep -v grep'.execute()
        all = proc1 | proc2 | proc3

        //sets the output to the piped commands to a string
        output = all.text

        //trims down the string to just the process ID
        pid = output.substring(output.indexOf(' '), output.size()).trim()
        pid = pid.substring(0, pid.indexOf(' ')).trim()
        return pid
}

Это мое решение. (Я хотел сделать это методом, поэтому я поместил объявление метода в самый верх) Моя проблема в начале заключалась в том, что между именем процесса и идентификатором процесса было больше одного пробела. но затем я нашел метод обрезки, и это сработало хорошо. Если у вас есть вопросы по моему методу, дайте мне знать. Буду пересматривать периодически.

person Ian    schedule 31.05.2013
comment
Также, если вы хотите вернуть int, вы можете использовать метод toInteger. (например, pid = pid.toInteger()) - person Ian; 31.05.2013