今天是 :

golang 获取系统(cpu 内存 等)信息

package main

import (
	"bytes"
	"fmt"
	"github.com/shirou/gopsutil/cpu"
	"github.com/shirou/gopsutil/disk"
	"github.com/shirou/gopsutil/host"
	"github.com/shirou/gopsutil/mem"
	"github.com/shirou/gopsutil/net"
	"github.com/shirou/gopsutil/process"
	"golang.org/x/sys/windows"
	"io"
	"os"
	"os/exec"
	"time"
)

func GetCpuPercent() float64 {
	percent, _ := cpu.Percent(time.Second, false)
	return percent[0]
}

func GetMemPercent() float64 {
	memInfo, _ := mem.VirtualMemory()
	return memInfo.UsedPercent
}

func GetDiskPercent() float64 {
	parts, _ := disk.Partitions(true)
	diskInfo, _ := disk.Usage(parts[0].Mountpoint)
	return diskInfo.UsedPercent
}

func main() {

	//windows系统命令
	pt, err := windows.Getwd()
	fmt.Println("当前windows目录:", pt, err)

	//1.获取 cpu 内存 磁盘使用率
	fmt.Println(GetCpuPercent())
	fmt.Println(GetMemPercent())
	fmt.Println(GetDiskPercent())

	//获取本机信息
	info, _ := host.Info()
	fmt.Println(info)

	//获取CPU信息
	fmt.Println(" 获取CPU信息")
	infocpu, _ := cpu.Info() //总体信息
	fmt.Println(infocpu)

	fmt.Println("  cpu逻辑数量")
	c, _ := cpu.Counts(true) //cpu逻辑数量
	fmt.Println(c)           //4

	fmt.Println("cpu 核心")
	c, _ = cpu.Counts(false) //cpu物理核心
	fmt.Println(c)           //如果是2说明是双核超线程, 如果是4则是4核非超线

	fmt.Println("cpu 时间")
	infotm, _ := cpu.Times(false)
	fmt.Println(infotm)
	//用户CPU时间:就是用户的进程获得了CPU资源以后,在用户态执行的时间。
	//系统CPU时间:用户进程获得了CPU资源以后,在内核态的执行时间。

     //4. 获取内存信息
	fmt.Println("内存信息")
	infoMem , _ := mem.VirtualMemory()
	fmt.Println(infoMem)
	fmt.Println("swap内存信息")
	info2, _ := mem.SwapMemory()
	fmt.Println(info2)

	fmt.Println("磁盘信息------------")
	//磁盘信息
	infod, _ := disk.Partitions(true) //所有分区
	fmt.Println(infod)
	infod2, _ := disk.Usage("D:") //指定某路径的硬盘使用情况
	fmt.Println(infod2)
	infod3, _ := disk.IOCounters() //所有硬盘的io信息
	fmt.Println(infod3)

	//网络信息
	fmt.Println("网络信息------------")
	infonet, _ := net.Connections("all") //可填入tcp、udp、tcp4、udp4等等
	fmt.Println(infonet)

	//获取网络读写字节/包的个数
	fmt.Println("获取网络读写字节/包的个数------------")
	infoio , _ := net.IOCounters(false)
	fmt.Println(infoio)

	//获取进程信息
	fmt.Println("获取进程信息------------")
	infop, _ := process.Pids() //获取当前所有进程的pid
	fmt.Println(infop)

	p , e :=process.NewProcess(7988)
	fmt.Println("获取进程数据" , e)
	pm , _ :=p.MemoryInfo()
	if nil != pm {
		fmt.Println(pm.String())
	}else{
		fmt.Println("未找到进程信息")
	}




	// 1. exec.LookPath()

	cmdPath, _ := exec.LookPath("ls")
	fmt.Printf("cmdPath=%s\n", cmdPath)

	// 2. exec.Command()
	fmt.Println()
	cmd := exec.Command("ls", "-l")
	cmd.Stdout = os.Stdout
	// Run 和 Start只能用一个
	// Run starts the specified command and waits for it to complete.
	_ = cmd.Run()

	// Start starts the specified command but does not wait for it to complete.
	// _ = cmd.Start()
	// _ = cmd.Wait()

	// 3. pipe


	ps := exec.Command("ps", "-ef")
	grep := exec.Command("grep", "-i", "rabbitmq")

	r, w := io.Pipe()
	defer r.Close()
	defer w.Close()
	// ps | grep
	ps.Stdout = w
	grep.Stdin = r

	var buffer bytes.Buffer
	grep.Stdout = &buffer

	_ = ps.Start()
	_ = grep.Start()
	ps.Wait()
	w.Close()
	grep.Wait()
	io.Copy(os.Stdout, &buffer)
}

公告:

  本站采用 gin作为后台服务
前端使用 sematicui 框架搭建(拼凑)。
有喜欢本站的同学。欢迎到聊天室留言

评论: