使用'command slinging'获取Groovy中另一个程序的进程ID

时间:2013-05-29 20:57:47

标签: groovy scripting grep pid ps

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和我可以看到进程ID是否有输出它的方法?

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

有没有办法可以修改all.text以获取进程ID,还是有其他方法可以获取它?

1 个答案:

答案 0 :(得分:3)

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
}

这是我的解决方案。 (我想把它变成一个方法,所以我把方法声明放在最顶层) 我一开始的问题是进程名称和pid之间有多个空格。但后来我找到了修剪方法,效果很好。如果您对我的方法有疑问,请告诉我。我会定期检查。