Golang仿ps实现获取Linux进程信息
更新时间:2023年07月28日 11:07:56 作者:LeoForBest
这篇文章主要为大家学习介绍了Golang如何仿ps实现获取Linux进程信息,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起了解一下
原理
遍历读取/proc/
获取所有进程ID
cat /proc/5181/stat
中前四列分别为进程PID
,进程名
,进程状态
,父进程PID
Go代码
1.获取/proc/
下面所有文件名+文件夹名为数字的名字
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]) } }
测试验证
运行程序查看
到此这篇关于Golang仿ps实现获取Linux进程信息的文章就介绍到这了,更多相关Go获取Linux进程信息内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
一站式解决方案:在Windows和Linux上快速搭建Go语言开发环境
本文将介绍如何在Windows和Linux操作系统下搭建Go语言开发环境,以帮助您更高效地进行Go语言开发,需要的朋友可以参考下2023-10-10
最新评论