英文:
why golang exec can't get java pid
问题
Linux shell可以通过使用pgrep
命令来获取Java进程的PID。在你提供的示例中,使用以下命令可以获取Java进程的PID:
$ pgrep -u admin java
1866
这将返回Java进程的PID。
然而,你的Go代码似乎无法获取Java进程的PID。根据你提供的代码,你使用了os/exec
包来执行命令并获取输出。但是,你遇到了一个错误,输出显示为"exit status 2"。
这个问题可能是由于你使用的Go版本较旧(go1.4.2)导致的。建议升级到较新的Go版本,以解决可能存在的问题。你可以通过运行go version
命令来检查你当前的Go版本:
$ go version
go version go1.4.2 linux/amd64
另外,请确保你的操作系统(Red Hat 7.0)和Go版本之间的兼容性。
英文:
Linux shell get java pid
$pgrep -u admin java
1866
go code test.go
package main
import (
"fmt"
"os/exec"
)
func main() {
ret, err := exec.Command("pgrep", "-u ", "admin", "java").CombinedOutput()
if err != nil {
fmt.Println(err)
return
}
fmt.Println(string(ret))
}
go run test.go
$go run test.go
exit status 2
the question is why linux shell can get java pid ,but go call exec can't get java pid
the go version :
$go version
go version go1.4.2 linux/amd64
the os info
redhat 7.0
答案1
得分: 2
请尝试使用"-u"
而不是"-u "
。
英文:
Try to use "-u"
instead of "-u "
.
答案2
得分: 1
这看起来像是"exec.Command无法找到pgrep"。你可以通过添加以下内容来检查:
path, err := exec.LookPath("pgrep")
if err != nil {
fmt.Printf("无法找到pgrep,错误:%v\n", err)
} else {
fmr.Printf("pgrep的路径是%s\n", path)
}
英文:
That looks like "exec.Command cannot find pgrep". You could check this by adding something like the following:
path, err := exec.LookPath("pgrep")
if err != nil {
fmt.Printf("Could not find pgrep, err: %v\n", err)
} else {
fmr.Printf("The path to pgrep is %s\n", path)
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论