为什么Go语言调用exec执行pgrep无法获取Java进程PID
问题原因
核心问题出在Go代码里exec.Command的参数传递错误:
exec.Command调用时,每个命令行参数需要作为独立的字符串传入,不需要额外添加空格分隔。你在代码中给-u参数后面多写了一个空格,变成了"-u ",实际传递给pgrep的第一个参数是带尾部空格的-u,不属于pgrep的合法参数,因此命令执行异常返回状态码2。- Shell执行命令时会自动按空格拆分参数,所以你在Shell里输入
pgrep -u admin java时,Shell会自动拆分为pgrep、-u、admin、java四个参数,参数格式正确,因此可以正常执行。
修复方法
把代码里的"-u "的尾部空格删掉,修改为"-u"即可,修改后的代码如下:
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就可以正常输出Java进程的PID了。
内容的提问来源于stack exchange,提问作者fuyou001
相关产品推荐
相关产品推荐

