Go中当前正在运行的进程列表

Go中当前正在运行的进程列表,go,Go,如何获取Go中当前正在运行的进程列表 操作系统软件包提供了一些功能: 但是没有提供任何内容来查看正在运行的进程列表。标准库中没有这样的函数,很可能永远也不会有 在大多数情况下,程序不需要进程列表。Go程序通常希望等待单个或更少的进程,而不是所有进程。进程的PID通常通过搜索所有进程列表以外的其他方法获得 如果您在Linux上,可以通过读取/proc目录的内容来获取进程列表。请参阅问题如果您只需要流程信息,可以从go代码运行“ps”命令,然后解析文本输出 完整的解决方案可参考“Learning G

如何获取Go中当前正在运行的进程列表

操作系统软件包提供了一些功能:
但是没有提供任何内容来查看正在运行的进程列表。

标准库中没有这样的函数,很可能永远也不会有

在大多数情况下,程序不需要进程列表。Go程序通常希望等待单个或更少的进程,而不是所有进程。进程的PID通常通过搜索所有进程列表以外的其他方法获得


如果您在Linux上,可以通过读取
/proc
目录的内容来获取进程列表。请参阅问题

如果您只需要流程信息,可以从go代码运行“ps”命令,然后解析文本输出


完整的解决方案可参考“Learning Go”一书中的练习29@

为此,我建议使用以下库:

下面是一个获取总进程和运行进程的示例:

package main

import (
    "fmt"
    "github.com/shirou/gopsutil/host"
    "github.com/shirou/gopsutil/load"
)

func main() {
    infoStat, _ := host.Info()
    fmt.Printf("Total processes: %d\n", infoStat.Procs)

    miscStat, _ := load.Misc()
    fmt.Printf("Running processes: %d\n", miscStat.ProcsRunning)
}
该库允许获取其他几个数据。 查看文档,了解根据目标操作系统提供的可用信息。

此库: github.com/mitchellh/go-ps 为我工作

import (
      ps "github.com/mitchellh/go-ps"
      ... // other imports here...
)

func whatever(){
    processList, err := ps.Processes()
    if err != nil {
        log.Println("ps.Processes() Failed, are you using windows?")
        return
    }

    // map ages
    for x := range processList {
        var process ps.Process
        process = processList[x]
        log.Printf("%d\t%s\n",process.Pid(),process.Executable())

        // do os.* stuff on the pid
    }
}

适用于linux

我找到了一个相当简单的解决方案,可以在不使用大型库的情况下获取正在运行的进程列表:

主程序包
进口(
“fmt”
“操作系统”
“路径/文件路径”
)
func main(){
匹配项,错误:=filepath.Glob(“/proc/*/exe”)
对于u,文件:=范围匹配{
目标:=os.Readlink(文件)
如果len(目标)>0{
fmt.Printf(“%+v\n”,目标)
}
}
}
它将打印每个正在运行的进程的路径。如果您只需要进程名,那么可以使用
filepath.Base(target)

这是通过取消引用
/proc/[procID]/exe
文件的符号链接来实现的,该文件是指向可执行文件的符号链接。这比从
/proc/[procID]/status
文件中读取和提取进程名称要简单得多(如我找到的其他解决方案所建议的)


PS:这可能不适用于所有发行版,因为它依赖于process文件夹中的
exe
文件,它可能不会出现在所有版本的Linux中。

定义进程:)在您的操作系统上运行的进程列表或在您的go程序中运行的goroutine列表?在我的操作系统上运行的进程列表您需要跨平台解决方案吗?@proppy:Linux版本可以:)不确定您为什么被否决。。。go ps非常棒。根据OP的要求,查看进程列表(而不仅仅是计数):“github.com/shirou/gopsutil/process”。。。进程,错误:=进程。进程()