我正在尝试获取 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+ 中的差异
基本上就是肖恩在评论中所说的。您甚至可以用您的代码模仿 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)
}