go语言windows下进程信息获取实现方式

 更新时间:2026年04月27日 09:27:34   作者:尘帝阁  
文章主要介绍了如何获取当前进程的时间信息以及进程ID的方法,通过使用相关系统命令或编程语言中的库函数,可以轻松获取这些信息,对于进程管理、性能监控等场景具有重要价值

一、获取当前进程时间信息

import (
	"syscall"
	"fmt"
)

var (
		creationTime syscall.Filetime
		exitTime     syscall.Filetime
		kernelTime   syscall.Filetime
		userTime     syscall.Filetime
	)

	h, err := syscall.GetCurrentProcess()
	if err != nil {
		fmt.Println(err)
		return
	}

	err = syscall.GetProcessTimes(h, &creationTime, &exitTime, &kernelTime, &userTime)
	if err != nil {
		fmt.Println(err)
		return
	}
	fmt.Printf("CreationTime: %v\nExitTime: %v\nKernelTime: %v\nUserTime: %v\n", creationTime.Nanoseconds(), exitTime.Nanoseconds(), kernelTime.Nanoseconds(), userTime.Nanoseconds())

二、获取进程id

import (
	"fmt"
	"strings"
	"syscall"
	"time"

	"github.com/shirou/gopsutil/process"
)
// 获取当前进程pid
pid := syscall.Getpid()
fmt.Println("mypid:", pid)
// 获取系统所有进程id
pids, _ := process.Pids()
for _, pid := range pids {
	// 根据进程id实例化每个进程
	pn, _ := process.NewProcess(pid)
	pName, _ := pn.Name()
	// 过滤进程名为main.exe的进程信息
	if 0 != strings.Compare(pName, "main.exe") {
		continue
	}
	// 获取进程所在路径
	_, _ = pn.Cwd()
	h, err := syscall.OpenProcess(syscall.STANDARD_RIGHTS_REQUIRED|syscall.SYNCHRONIZE|0xfff, 	false, uint32(pid))
	if err != nil {
		fmt.Println(err)
		return
	}
	defer syscall.CloseHandle(h)
	err = syscall.GetProcessTimes(h, &creationTime, &exitTime, &kernelTime, &userTime)
	if err != nil {
		fmt.Println(err)
		return
	}
	fmt.Println("pid:", pid, ",milliseconds:", creationTime.Nanoseconds()/1000000)
}
_, err = process.Processes()
if err != nil {
	fmt.Println(err.Error())
	return
}

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • golang http 连接超时和传输超时的例子

    golang http 连接超时和传输超时的例子

    今天小编就为大家分享一篇golang http 连接超时和传输超时的例子,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-07-07
  • 深入了解Go语言中database/sql是如何设计的

    深入了解Go语言中database/sql是如何设计的

    在 Go 语言中内置了 database/sql 包,它只对外暴露了一套统一的编程接口,便可以操作不同数据库,那么database/sql 是如何设计的呢,下面就来和大家简单聊聊吧
    2023-07-07
  • Go工具链之go tool cover使用方法和示例详解

    Go工具链之go tool cover使用方法和示例详解

    go tool cover是Go工具链中的一个命令,作用是分析测试用例的代码覆盖率,本文将对go tool cover 作用,使用方法和使用场景作一个简单的介绍,感兴趣的同学可以参考阅读一下
    2023-07-07
  • Go语言中日志统一处理详解

    Go语言中日志统一处理详解

    在现代软件开发中,日志记录是一项至关重要的任务,它不仅帮助开发人员诊断问题,还有助于监控和维护应用程序,本文主要来和大家聊聊日志的统一处理,感兴趣的小伙伴可以了解下
    2024-01-01
  • Go中map数据类型3点小知识

    Go中map数据类型3点小知识

    这篇文章主要介绍了Go中map数据类型3点小知识,在go中使用map时可能会用本文中的小知识,需要的朋友可以参考下
    2014-10-10
  • GO语言实现简单TCP服务的方法

    GO语言实现简单TCP服务的方法

    这篇文章主要介绍了GO语言实现简单TCP服务的方法,实例分析了Go语言实现TCP服务的技巧,需要的朋友可以参考下
    2015-03-03
  • go new和make的区别以及为什么new返回的是指针问题分析

    go new和make的区别以及为什么new返回的是指针问题分析

    Go语言中new和make的区别在于:new用于分配值类型内存并返回指针,适用于所有值类型;make用于创建并初始化slice、map和channel,只适用于引用类型,new返回指针可以明确表示值是在堆上分配的,避免不必要的值拷贝,并且与零值初始化语义一致
    2026-01-01
  • golang中实现给gif、png、jpeg图片添加文字水印

    golang中实现给gif、png、jpeg图片添加文字水印

    这篇文章主要介绍了golang中实现给gif、png、jpeg图片添加文字水印,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-04-04
  • Go语言学习之映射(map)的用法详解

    Go语言学习之映射(map)的用法详解

    Map是一种无序的键值对的集合。这篇文章主要为大家详细介绍了Go语言中映射的用法,文中的示例代码讲解详细,对我们学习Go语言有一定的帮助,需要的可以参考一下
    2022-04-04
  • Go语言循环遍历含有中文的字符串的方法小结

    Go语言循环遍历含有中文的字符串的方法小结

    这篇文章主要介绍了Go语言循环遍历含有中文的字符串的几种方法,文章通过代码示例讲解的非常详细,具有一定的参考价值,感兴趣的小伙伴跟着小编一起来看看吧
    2023-07-07

最新评论