Golang仿ps實現(xiàn)獲取Linux進程信息
更新時間:2023年07月28日 11:07:56 作者:LeoForBest
這篇文章主要為大家學習介紹了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)的學過C++、Java等語言以及面向?qū)ο蟮脑?,相信應該對多態(tài)不會陌生。多態(tài)是面向?qū)ο蠓懂牣斨薪?jīng)常使用并且非常好用的一個功能,它主要是用在強類型語言當中,像是Python這樣的弱類型語言,變量的類型可以隨意變化,也沒有任何限制,其實區(qū)別不是很大2021-06-06使用Go重構(gòu)流式日志網(wǎng)關(guān)的實戰(zhàn)分享
流式日志網(wǎng)關(guān)的主要功能是提供?HTTP?接口,接收?CDN?邊緣節(jié)點上報的各類日志(訪問日志/報錯日志/計費日志等),將日志作預處理并分流到多個的?Kafka?集群和?Topic?中,本文就給大家分享如何使用?Go?重構(gòu)流式日志網(wǎng)關(guān)2023-06-06Go語言實現(xiàn)單端口轉(zhuǎn)發(fā)到多個端口
這篇文章主要為大家詳細介紹了Go語言實現(xiàn)單端口轉(zhuǎn)發(fā)到多個端口,文中的示例代碼講解詳細,具有一定的參考價值,對大家的學習或工作有一定的幫助,需要的小伙伴可以了解下2024-02-02