You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为什么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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 04:54:06