Я пытаюсь создать метод в Groovy, чтобы получить идентификатор процесса приложения. Я в настоящее время на данном этапе:Получение PID для процесса с использованием Groovy
String getProcessIdFor(String program) {
def buffer = new StringBuffer()
Process commandOne = 'ps -A'.execute()
Process commandTwo = "grep -m1 '${program}'".execute()
Process commandThree = "awk '{print \$1}'".execute()
Process process = commandOne | commandTwo | commandThree
process.waitForProcessOutput(buffer, buffer)
return buffer.toString()
}
Но это дает мне:
Exception in thread "Thread-1" groovy.lang.GroovyRuntimeException: exception while reading process stream
awk: syntax error at source line 1
at org.codehaus.groovy.runtime.ProcessGroovyMethods$3.run(ProcessGroovyMethods.java:402)
context is
at java.lang.Thread.run(Thread.java:745)
>>> ' <<<
missing }
Caused by: java.io.IOException: Stream closed
awk: bailing out at source line 1
at java.lang.ProcessBuilder$NullOutputStream.write(ProcessBuilder.java:434)
at java.io.OutputStream.write(OutputStream.java:116)
at java.io.BufferedOutputStream.write(BufferedOutputStream.java:122)
at java.io.BufferedOutputStream.write(BufferedOutputStream.java:122)
at org.codehaus.groovy.runtime.ProcessGroovyMethods$3.run(ProcessGroovyMethods.java:399)
... 1 more
Process finished with exit code 0
Похоже, он изо всех сил по команде awk
, но я не могу показаться, чтобы выяснить, где я идет не так. Есть идеи?
ли ' 'AWK {напечатать \ $ 1}'. Execute()' работать? Я бы просто использовал findAll и разделил вместо того, чтобы трафик между тремя процессами –
или '['awk', '{print $ 1}']. Execute()'? – cfrick
Есть несколько хороших решений в этой ссылке, а некоторые из них независимы от платформы - http://stackoverflow.com/questions/35842/how-can-a-java-program-get-its-own-process-id – Rao