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进程信息内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Go语言列表List获取元素的4种方式

    Go语言列表List获取元素的4种方式

    Golang的列表元素的获取可以使用内置的 Front 函数获取头结点,使用 Back 函数获取尾结点,使用 Prev 获取前一个结点,使用 Next 获取下一个结点,本文就介绍了Go语言列表List获取元素的4种方式,感兴趣的可以了解一下
    2022-04-04
  • go常用指令之go mod详解

    go常用指令之go mod详解

    当go命令运行时,它查找当前目录然后查找相继的父目录来找出 go.mod,下面这篇文章主要给大家介绍了关于go常用指令之go mod的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-08-08
  • golang中struct和interface的基础使用教程

    golang中struct和interface的基础使用教程

    Go不同于一般的面向对象语言,需要我们好好的学习研究,下面这篇文章主要给大家介绍了关于golang中struct和interface的基础使用的相关资料,需要的朋友可以参考借鉴,下面随着小编来一起学习学习吧。
    2018-03-03
  • 重学Go语言之基础数据类型详解

    重学Go语言之基础数据类型详解

    Go语言有非常强大的数据类型系统,其支持的数据类型大体上可分为四类:基础数据类型、引用数据类型、接口类型、复合类型。本文就来讲讲它们各自的用法吧
    2023-02-02
  • 以alpine作为基础镜像构建Golang可执行程序操作

    以alpine作为基础镜像构建Golang可执行程序操作

    这篇文章主要介绍了以alpine作为基础镜像构建Golang可执行程序操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-12-12
  • Go语言中nil判断的注意事项(最新推荐)

    Go语言中nil判断的注意事项(最新推荐)

    本文给大家介绍Go语言中nil判断的注意事项,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2025-06-06
  • Go语言题解LeetCode268丢失的数字示例详解

    Go语言题解LeetCode268丢失的数字示例详解

    这篇文章主要为大家介绍了Go语言题解LeetCode268丢失的数字示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-12-12
  • Go语言七篇入门教程六网络编程

    Go语言七篇入门教程六网络编程

    这篇文章主要为大家介绍了Go语言的网络编程,其中包含了Socket编程,Http编程以及RPC编程,本篇文章是Go语言七篇入门系列文章,有需要的朋友可以借鉴下
    2021-11-11
  • Golang使用channel实现一个优雅退出功能

    Golang使用channel实现一个优雅退出功能

    最近补 Golang channel 方面八股的时候发现用 channel 实现一个优雅退出功能好像不是很难,之前写的 HTTP 框架刚好也不支持优雅退出功能,于是就参考了 Hertz 优雅退出方面的代码,为我的 PIANO 补足了这个 feature
    2023-03-03
  • GO语言匿名函数的几种使用方式

    GO语言匿名函数的几种使用方式

    本文主要介绍了GO语言匿名函数的几种使用方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-08-08

最新评论