go语言获取机器的进程和进程运行参数 获取当前进程的jmx端口 go调用/jstat获取当前Java进程gc情况

这里主要分享go中获取机器进程和进程参数的一些代码

获取当前机器所有的pid:

import "github.com/shirou/gopsutil/process"
pids, err := process.Pids()
for _, pid := range pids {
   
		proc, err := process.NewProcess(pid)
		if err != nil {
   
			log.Errorf("get pid %d info error: %s", pid, err.Error())
			continue
		}

		// 获取进程命令行参数
		cmdLine, err := proc.Cmdline()
		if err != nil {
   
			log.Errorf("get cmdLine of pid %d error: %s", pid, err.Error())
			continue
		}

		log.Infof("cmdline of pid %d is: %s", pid, cmdLine)

		if !strings.Contains(cmdLine, "java") {
   
			continue
		}
//获取jmx端口:
	// 检查命令行参数是否包含"java"和"Dcom.sun.management.jmxremote.port"
			var jmxPort string
			if strings.Contains(cmdLine, "Dcom.sun.management.jmxremote.port") {
   
				// 提取JMX端口
				re := regexp.MustCompile(`Dcom.sun.management.jmxremote.port=(\d+)`)
				match := re.FindStringSubmatch(cmdLine)
				if len(match) > 1 {
   
					jmxPort = match[1]
					log.Infof("PID: %v, JMX Port: %v , %s, cmdLine: %s\n", pid, match[1], jmxPort, cmdLine)
				} else {
   
					log.Infof("not found jmxremote.port or jmxremote.rmi.port")
					log.Infof("PID: %v, of cmdLine: %s, has no Dcom.sun.management.jmxremote.port \n", pid, cmdLine)
				}
			}

Process.CmdlineWithContext 方法的实现依赖于 callPsWithContext 函数来获取进程的命令行参数。这个方法的实现如下:

func (
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值