使用 exec 在 golang 中运行 linux top 命令时得到不正确的结果

问题描述 投票:0回答:1

我正在尝试获取 golang 中运行最高的进程,为此我使用 golang“os/exec”包运行 linux top 命令,但进程名称存在差异。

进程名称被截断,并在 golang 输出中的名称中添加“+”后缀。但是当在终端中运行相同的命令时,它显示完整的进程名称。

命令:top -b -n 1

我正在运行以下代码:

cmd := exec.Command("top","-b","-n","1")
out, err := cmd.Output()
if err != nil {
    fmt.Println("Error in running command ", err)
}
fmt.Println(string(out))

预期结果:具有完整命令名称的顶级运行进程,例如行:

 137295 root      20   0       0      0      0 I   0.0   0.0   0:00.00 kworker/u1:1-writeback

Go 输出行中返回的结果:

 137295 root      20   0       0      0      0 I   0.0   0.0   0:00.00 kworker+

注意命令名称 kworker/u4:2-writeback 和 kworker+ 中的差异

linux go exec
1个回答
0
投票

基本上就是肖恩在评论中所说的。您甚至可以用您的代码模仿 Go 代码的行为,通过调整终端大小来查看输出被截断并替换为

+

尽管使用全尺寸终端,您仍然可以通过设置

Stderr
Stdout
*exec.Cmd
来让 Go 代码显示相同的输出,就像直接在终端上执行它一样。

    cmd := exec.Command("top", "-b", "-n", "1")
    cmd.Stdout = os.Stdout
    cmd.Stderr = os.Stderr
    if err := cmd.Run(); err != nil {
        fmt.Println("Error in running command ", err)
    }
© www.soinside.com 2019 - 2024. All rights reserved.