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

使用Go语言exec执行Linux top命令时进程名显示异常

解决Go执行top命令进程名被截断的问题

问题原因

top的批处理模式(-b)会依据终端宽度限制进程名的显示长度。在终端直接执行时,top能读取当前终端的COLUMNS环境变量,用合适宽度显示完整进程名;但通过Go的os/exec执行时,默认不会传递终端相关环境变量,top会使用默认窄宽度(通常为80列),导致长进程名被截断并添加+后缀。

解决方案

方案1:手动设置COLUMNS环境变量

创建exec.Cmd时,添加足够大的COLUMNS环境变量,让top知晓输出宽度足够容纳完整进程名:

cmd := exec.Command("top", "-b", "-n", "1")
// 设置COLUMNS为200,可根据实际需求调整更大值
cmd.Env = append(os.Environ(), "COLUMNS=200")
out, err := cmd.Output()
if err != nil {
    fmt.Println("Error in running command ", err)
}
fmt.Println(string(out))

方案2:结合top的-c参数显示完整命令行

-c参数会让top显示完整命令行(含进程完整路径与参数),搭配批处理模式可获取更全面的进程信息:

cmd := exec.Command("top", "-b", "-n", "1", "-c")
// 建议同时设置COLUMNS避免输出截断
cmd.Env = append(os.Environ(), "COLUMNS=200")
out, err := cmd.Output()
if err != nil {
    fmt.Println("Error in running command ", err)
}
fmt.Println(string(out))

验证效果

修改后运行Go程序,进程名将不再被截断,会显示完整名称(如kworker/u1:1-writeback),与终端直接执行的结果一致。

内容的提问来源于stack exchange,提问作者Shivam Saxena

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 08:24:52