版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://cloud.tencent.com/developer/article/1551792
func runInWindows(cmd string) (string, error) {
result, err := exec.Command("cmd", "/c", cmd).Output()
if err != nil {
return "", err
}
return strings.TrimSpace(string(result)), err
}
func RunCommand(cmd string) (string, error) {
if runtime.GOOS == "windows" {
return runInWindows(cmd)
} else {
return runInLinux(cmd)
}
}
func runInLinux(cmd string) (string, error) {
fmt.Println("Running Linux cmd:" + cmd)
result, err := exec.Command("/bin/sh", "-c", cmd).Output()
if err != nil {
return "", err
}
return strings.TrimSpace(string(result)), err
}
//根据进程名判断进程是否运行
func CheckProRunning(serverName string) (bool, error) {
a := `ps ux | awk '/` + serverName + `/ && !/awk/ {print $2}'`
pid, err := RunCommand(a)
if err != nil {
return false, err
}
return pid != "", nil
}
//根据进程名称获取进程ID
func GetPid(serverName string) (string, error) {
a := `ps ux | awk '/` + serverName + `/ && !/awk/ {print $2}'`
pid, err := RunCommand(a)
return pid , err
}
原理:利用golang执行shell(ps ux)(只能获取当前用户进程,如果要获取所有进程,请用ps aux) 命令,在命令中获取进程ID,然后传递给go语言即可。
最后贴出"ps ux"命令参数详解:
ps ux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
USER: 进程拥有者
PID:pid
%CPU:占用的cpu使用率
VSZ:占用的内存使用率
RSS:占用的虚拟内存大小
TTY:是否为登入者执行的程序,若为tty1-tty6,为本机登入者,若为pts/??,则为远程登入者。
STAT:程序的状态,R:正在执行中,S:睡眠,T:正在检测或者停止,Z:死亡程序
START:程序开始时间
TIME:程序运行的时间
COMMAND:所执行的指令。