2 回答

TA貢獻(xiàn)1775條經(jīng)驗(yàn) 獲得超8個(gè)贊
您可以在ps
此處找到 Linux用于遍歷進(jìn)程列表的代碼:
https://gitlab.com/procps-ng/procps/blob/master/proc/readproc.c#L1167
簡(jiǎn)而言之,算法是:
opendir
在/proc
調(diào)用
readdir
直到返回第一個(gè)字符是數(shù)字的條目。
因此,要計(jì)算進(jìn)程數(shù),您可以通讀整個(gè)目錄并計(jì)算匹配的條目數(shù)。
您可以在 Go 中使用os.Open
to open執(zhí)行此操作/proc
,然后調(diào)用該Readdirnames
方法列出進(jìn)程。

TA貢獻(xiàn)1909條經(jīng)驗(yàn) 獲得超7個(gè)贊
以下程序?qū)ξ矣杏茫?/p>
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)
}
請(qǐng)注意,您必須使用/bin/sh -c. exec.Command執(zhí)行單個(gè)程序(可執(zhí)行文件),例如/bin/sh或ps或tail。
當(dāng)您ps -A --no-headers | wc -l在命令提示符中鍵入此表達(dá)式時(shí),該表達(dá)式由 shell 程序(例如/bin/sh)解釋,并且 shell 程序啟動(dòng)兩個(gè)程序(ps和wc)并將|第一個(gè)程序的輸出()管道()到第二個(gè)程序的輸入。
/bin/sh -c command相當(dāng)于command在終端中鍵入(有一些細(xì)微差別,請(qǐng)閱讀man sh以了解更多詳細(xì)信息)。
- 2 回答
- 0 關(guān)注
- 201 瀏覽
添加回答
舉報(bào)