ps -efgrep utilsnovnc_proxy -- vnc localhost5900 --listen 192168451526081root 1067454 574216 0 0846 pts15 000000 grep --color=auto utilsnovnc_proxy -- vnc localhost5900 --listen 19216845152608
在golang中,可以使用os/exec包来执行命令并获取输出。以下是一个示例代码,可以获取到该命令的进程ID(PID):
package main
import (
"fmt"
"os/exec"
"strings"
)
func main() {
cmd := exec.Command("ps", "-ef")
grepCmd := exec.Command("grep", "./utils/novnc_proxy -- vnc localhost:5900 --listen 192.168.45.152:6081")
// 管道连接两个命令
grepCmd.Stdin, _ = cmd.StdoutPipe()
// 启动grep命令
grepCmd.Start()
// 执行ps命令
output, _ := cmd.Output()
// 等待grep命令执行完毕
grepCmd.Wait()
// 将输出转换为字符串
outputStr := string(output)
// 获取PID
pid := ""
if strings.Contains(outputStr, "grep") {
// 如果grep命令本身也被匹配到了,需要排除掉
lines := strings.Split(outputStr, "\n")
for _, line := range lines {
if strings.Contains(line, "./utils/novnc_proxy -- vnc localhost:5900 --listen 192.168.45.152:6081") && !strings.Contains(line, "grep") {
fields := strings.Fields(line)
pid = fields[1]
break
}
}
}
fmt.Println("PID:", pid)
}
请注意,上述代码仅适用于类Unix系统,如Linux。如果您在Windows上运行该代码,需要更改命令和输出的处理方式。
原文地址: https://www.cveoy.top/t/topic/ijbG 著作权归作者所有。请勿转载和采集!