猿问

在 Golang 中计算 linux 上的进程

我正在开发一个插件,它可以计算在 Linux 系统上运行的进程。我四处搜索,似乎我需要访问 /proc 并从那里收集信息。我还尝试使用 os、os/exec 和 syscall 包来运行外部命令,ps -A --no-headers | wc -l但这也不起作用。我也在用 golang 编写代码。欢迎任何帮助或建议。


慕慕森
浏览 170回答 2
2回答

www说

您可以在ps此处找到 Linux用于遍历进程列表的代码:https://gitlab.com/procps-ng/procps/blob/master/proc/readproc.c#L1167简而言之,算法是:opendir 在 /proc调用readdir直到返回第一个字符是数字的条目。因此,要计算进程数,您可以通读整个目录并计算匹配的条目数。您可以在 Go 中使用os.Opento open执行此操作/proc,然后调用该Readdirnames方法列出进程。

jeck猫

以下程序对我有用:package mainimport (    "fmt"    "log"    "os/exec")func main() {    out, err := exec.Command("/bin/sh", "-c", "ps -A --no-headers | wc -l").Output()    if err != nil {        log.Fatal(err)    }    fmt.Printf("Number of running processes: %s\n", out)}请注意,您必须使用/bin/sh -c. exec.Command执行单个程序(可执行文件),例如/bin/sh或ps或tail。当您ps -A --no-headers | wc -l在命令提示符中键入此表达式时,该表达式由 shell 程序(例如/bin/sh)解释,并且 shell 程序启动两个程序(ps和wc)并将|第一个程序的输出()管道()到第二个程序的输入。/bin/sh -c command相当于command在终端中键入(有一些细微差别,请阅读man sh以了解更多详细信息)。
随时随地看视频慕课网APP

相关分类

Go
我要回答