sysmonitord/internal/scanner/process/process.go
2026-03-29 21:16:35 +08:00

67 lines
1.2 KiB
Go

package process
import (
"fmt"
"sysmonitord/pkg/logger"
"github.com/shirou/gopsutil/v3/process"
"go.uber.org/zap"
)
type ProcessInfo struct {
PID int32 `json:"pid"`
Name string `json:"name"`
Path string `json:"path"`
Cmdline string `json:"cmdline"`
}
func ScanAllProcesses() ([]ProcessInfo, error) {
logger.Log.Info("[scan]正在扫描系统中的所有进程...")
pids, err := process.Pids()
if err != nil {
logger.Log.Error("[scan]获取进程列表失败", zap.Error(err))
return nil, err
}
var processList []ProcessInfo
for _, pid := range pids {
p, err := process.NewProcess(pid)
if err != nil {
continue // 跳过临时进程
}
name, err := p.Name()
if err != nil {
name = "unknown"
}
exePath, err := p.Exe()
if err != nil {
exePath = ""
}
cmdline, err := p.Cmdline()
if err != nil {
cmdline = ""
}
info := ProcessInfo{
PID: pid,
Name: name,
Path: exePath,
Cmdline: cmdline,
}
processList = append(processList, info)
}
logger.Log.Info("[scan]进程扫描完成", zap.Int("进程数量", len(processList)))
return processList, nil
}
func (p ProcessInfo) String() string {
return fmt.Sprintf("%s:%s:%d", p.Name, p.Path, p.PID)
// Todo: 哈希计算
}