Golang仿ps實(shí)現(xiàn)獲取Linux進(jìn)程信息
原理
遍歷讀取/proc/
獲取所有進(jìn)程ID
cat /proc/5181/stat
中前四列分別為進(jìn)程PID
,進(jìn)程名
,進(jìn)程狀態(tài)
,父進(jìn)程PID
Go代碼
1.獲取/proc/
下面所有文件名+文件夾名為數(shù)字的名字
2.讀取/proc/xxx/stat
獲取進(jìn)程信息輸出
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]) } }
測(cè)試驗(yàn)證
運(yùn)行程序查看
到此這篇關(guān)于Golang仿ps實(shí)現(xiàn)獲取Linux進(jìn)程信息的文章就介紹到這了,更多相關(guān)Go獲取Linux進(jìn)程信息內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
淺談Go語言多態(tài)的實(shí)現(xiàn)與interface使用
如果大家系統(tǒng)的學(xué)過C++、Java等語言以及面向?qū)ο蟮脑?,相信?yīng)該對(duì)多態(tài)不會(huì)陌生。多態(tài)是面向?qū)ο蠓懂牣?dāng)中經(jīng)常使用并且非常好用的一個(gè)功能,它主要是用在強(qiáng)類型語言當(dāng)中,像是Python這樣的弱類型語言,變量的類型可以隨意變化,也沒有任何限制,其實(shí)區(qū)別不是很大2021-06-06Go語言使用templ實(shí)現(xiàn)編寫HTML用戶界面
templ是一個(gè)在 Go 中編寫 HTML 用戶界面的語言,使用 templ,我們可以創(chuàng)建可呈現(xiàn) HTML 片段的組件,下面就跟隨小編一起了解一下具體的實(shí)現(xiàn)方法吧2023-12-12golang中接口對(duì)象的轉(zhuǎn)型兩種方式
這篇文章主要介紹了golang中接口對(duì)象的轉(zhuǎn)型方式,大家都知道接口對(duì)象的轉(zhuǎn)型有兩種方式,文中通過示例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2021-10-10GO 語言運(yùn)行環(huán)境的基礎(chǔ)知識(shí)
這篇文章主要介紹了GO 語言運(yùn)行環(huán)境的基礎(chǔ)知識(shí)的相關(guān)資料,需要的朋友可以參考下2022-09-09使用Go重構(gòu)流式日志網(wǎng)關(guān)的實(shí)戰(zhàn)分享
流式日志網(wǎng)關(guān)的主要功能是提供?HTTP?接口,接收?CDN?邊緣節(jié)點(diǎn)上報(bào)的各類日志(訪問日志/報(bào)錯(cuò)日志/計(jì)費(fèi)日志等),將日志作預(yù)處理并分流到多個(gè)的?Kafka?集群和?Topic?中,本文就給大家分享如何使用?Go?重構(gòu)流式日志網(wǎng)關(guān)2023-06-06Go語言實(shí)現(xiàn)單端口轉(zhuǎn)發(fā)到多個(gè)端口
這篇文章主要為大家詳細(xì)介紹了Go語言實(shí)現(xiàn)單端口轉(zhuǎn)發(fā)到多個(gè)端口,文中的示例代碼講解詳細(xì),具有一定的參考價(jià)值,對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的小伙伴可以了解下2024-02-02