golang 根据进程名判断进程是否存在并结束
在Go语言中,可以使用os/exec包来执行系统命令,并通过执行ps命令获取当前系统中的进程列表。然后可以通过解析命令输出来判断指定进程是否存在,并通过执行kill命令来结束进程。
下面是一个示例代码,用于根据进程名判断进程是否存在并结束:
package main
import (
"bytes"
"log"
"os/exec"
"strings"
)
func processExists(processName string) bool {
cmd := exec.Command("ps", "-e", "-o", "pid,comm")
output, err := cmd.Output()
if err != nil {
log.Fatal(err)
}
// 解析命令输出
lines := strings.Split(string(output), "\n")
for _, line := range lines[1:] {
// 获取进程名和PID
fields := strings.Fields(line)
if len(fields) > 1 {
pid := fields[0]
name := fields[1]
// 判断进程名是否匹配
if name == processName {
return true
}
}
}
return false
}
func killProcess(processName string) error {
cmd := exec.Command("pkill", processName)
err := cmd.Run()
if err != nil {
return err
}
return nil
}
func main() {
processName := "myprocess"
exists := processExists(processName)
if exists {
err := killProcess(processName)
if err != nil {
log.Fatal(err)
}
log.Printf("Process %s has been killed", processName)
} else {
log.Printf("Process %s does not exist", processName)
}
}
在上述示例代码中,processExists函数通过执行ps -e -o pid,comm命令获取当前系统中的进程列表,并解析命令输出来判断指定进程是否存在。killProcess函数通过执行pkill命令结束指定进程。
注意,这里使用了log.Fatal来处理错误,这样可以直接终止程序。如果你希望在错误发生时继续执行程序,可以使用log.Println或自定义错误处理逻辑
原文地址: https://www.cveoy.top/t/topic/iSbg 著作权归作者所有。请勿转载和采集!