Golang仿ps實現(xiàn)獲取Linux進程信息
原理
遍歷讀取/proc/獲取所有進程ID
cat /proc/5181/stat中前四列分別為進程PID,進程名,進程狀態(tài),父進程PID

Go代碼
1.獲取/proc/下面所有文件名+文件夾名為數(shù)字的名字
2.讀取/proc/xxx/stat獲取進程信息輸出
package main
import (
"fmt"
"io/ioutil"
"log"
"regexp"
"sort"
"strconv"
)
func main() {
var process []int
var validId = regexp.MustCompile("^[0-9]+$")
infoList, err := ioutil.ReadDir("/proc")
if err != nil {
log.Println(infoList)
}
for _, info := range infoList {
if info.IsDir() && validId.MatchString(info.Name()) {
p, _ := strconv.Atoi(info.Name())
process = append(process, p)
}
}
sort.Ints(process)
statRe := regexp.MustCompile(`([0-9]+) \((.+?)\) [a-zA-Z]+ ([0-9]+)`)
fmt.Printf("%6s\t%6s\t%s\n", "PID", "PPID", "NAME")
for _, p := range process {
b, err := ioutil.ReadFile(fmt.Sprintf("/proc/%d/stat", p))
if err != nil {
continue
}
matches := statRe.FindStringSubmatch(string(b))
fmt.Printf("%6s\t%6s\t%s\n", matches[1], matches[3], matches[2])
}
}測試驗證
運行程序查看

到此這篇關(guān)于Golang仿ps實現(xiàn)獲取Linux進程信息的文章就介紹到這了,更多相關(guān)Go獲取Linux進程信息內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
淺談Go語言多態(tài)的實現(xiàn)與interface使用
如果大家系統(tǒng)的學(xué)過C++、Java等語言以及面向?qū)ο蟮脑?,相信?yīng)該對多態(tài)不會陌生。多態(tài)是面向?qū)ο蠓懂牣?dāng)中經(jīng)常使用并且非常好用的一個功能,它主要是用在強類型語言當(dāng)中,像是Python這樣的弱類型語言,變量的類型可以隨意變化,也沒有任何限制,其實區(qū)別不是很大2021-06-06
使用Go重構(gòu)流式日志網(wǎng)關(guān)的實戰(zhàn)分享
流式日志網(wǎng)關(guān)的主要功能是提供?HTTP?接口,接收?CDN?邊緣節(jié)點上報的各類日志(訪問日志/報錯日志/計費日志等),將日志作預(yù)處理并分流到多個的?Kafka?集群和?Topic?中,本文就給大家分享如何使用?Go?重構(gòu)流式日志網(wǎng)關(guān)2023-06-06
Go語言實現(xiàn)單端口轉(zhuǎn)發(fā)到多個端口
這篇文章主要為大家詳細介紹了Go語言實現(xiàn)單端口轉(zhuǎn)發(fā)到多個端口,文中的示例代碼講解詳細,具有一定的參考價值,對大家的學(xué)習(xí)或工作有一定的幫助,需要的小伙伴可以了解下2024-02-02

