为什么 Golang 的 exec 无法获取 Java 进程的 PID?

huangapple go评论133阅读模式
英文:

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)
}

huangapple
  • 本文由 发表于 2021年11月6日 17:38:48
  • 转载请务必保留本文链接:https://go.coder-hub.com/69862874.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定