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 使用gorm添加数据库排他锁,for update
这篇文章主要介绍了Golang 使用gorm添加数据库排他锁,for update,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧2020-12-12


最新评论