Golang 获取所有进程: Linux 和 Windows 示例
在 Go 中,可以使用os和os/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 和名称,可以根据自己的需求进行扩展。
原文地址: https://www.cveoy.top/t/topic/qrmb 著作权归作者所有。请勿转载和采集!