在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上运行该代码,需要更改命令和输出的处理方式。

ps -efgrep utilsnovnc_proxy -- vnc localhost5900 --listen 192168451526081root 1067454 574216 0 0846 pts15 000000 grep --color=auto utilsnovnc_proxy -- vnc localhost5900 --listen 19216845152608

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

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