2 回答
TA贡献1775条经验 获得超8个赞
您可以在ps
此处找到 Linux用于遍历进程列表的代码:
https://gitlab.com/procps-ng/procps/blob/master/proc/readproc.c#L1167
简而言之,算法是:
opendir
在/proc
调用
readdir
直到返回第一个字符是数字的条目。
因此,要计算进程数,您可以通读整个目录并计算匹配的条目数。
您可以在 Go 中使用os.Open
to open执行此操作/proc
,然后调用该Readdirnames
方法列出进程。
TA贡献1909条经验 获得超7个赞
以下程序对我有用:
package main
import (
"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以了解更多详细信息)。
- 2 回答
- 0 关注
- 169 浏览
添加回答
举报