在 Go 中,可以使用osos/exec包来获取所有进程。下面是一个简单的示例代码,演示了如何使用这些包来获取所有进程的 PID 和名称:

package main

import (
    "fmt"
    "os"
    "os/exec"
    "strconv"
    "strings"
)

func main() {
    // 检查操作系统类型
    switch osType := os.Getenv("GOOS"); osType {
    case "linux":
        getLinuxProcesses()
    case "windows":
        getWindowsProcesses()
    default:
        fmt.Println("Unsupported operating system:", osType)
    }
}

// 获取Linux系统的所有进程
func getLinuxProcesses() {
    // 执行ps命令获取所有进程
    output, err := exec.Command("ps", "\-e", "\-o", "pid,comm").Output()
    if err != nil {
        fmt.Println("Failed to get processes:", err)
        return
    }

    lines := strings.Split(string(output), "\n")
    for _, line := range lines[1:] {
        fields := strings.Fields(line)
        if len(fields) >= 2 {
            pid, _ := strconv.Atoi(fields[0])
            name := fields[1]
            fmt.Printf("PID: %d, Name: %s\n", pid, name)
        }
    }
}

// 获取Windows系统的所有进程
func getWindowsProcesses() {
    // 执行tasklist命令获取所有进程
    output, err := exec.Command("tasklist").Output()
    if err != nil {
        fmt.Println("Failed to get processes:", err)
        return
    }

    lines := strings.Split(string(output), "\n")
    for _, line := range lines[3 : len(lines)-2] {
        fields := strings.Fields(line)
        if len(fields) >= 2 {
            pid, _ := strconv.Atoi(fields[1])
            name := fields[0]
            fmt.Printf("PID: %d, Name: %s\n", pid, name)
        }
    }
}

这个示例代码根据操作系统类型来选择不同的获取进程列表的方法。在Linux上,使用ps命令,而在Windows上,使用tasklist命令。请注意,这个示例只是简单地获取进程的 PID 和名称,可以根据自己的需求进行扩展。

Golang 获取所有进程:  Linux 和 Windows 示例

原文地址: https://www.cveoy.top/t/topic/qrmb 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录