golang查找端口号占用的进程号

摘要:
戈朗官方套餐:https://studygolang.com/pkgdocos它支持获取当前进程pid和killing,但仅限于获取当前进程pidFindProcess()。kill()os Getpid()基本用法;但是,它没有提供基于端口号获得相应pid的方法,因此我们仍然执行shell指令来过滤结果集以获得pid//获取与端口8299和killprocessInfo:=exec.Comma对应的进程号

golang官方包:

https://studygolang.com/pkgdoc

os

支持获取当前进程pid并kill、但是仅仅限于获取当前进程pid

FindProcess().Kill()
os.Getpid()

基础用法;但是却没有提供依据端口号获取对应的pid,所以还是执行shell指令对结果集进行过滤获取pid

// 获取8299端口对应进程号并kill
processInfo := exec.Command("/bin/sh", "-c",`lsof -i:8299 | awk '{print $2}' | awk  'NR==2{print}'`)
if pid, err := processInfo.Output(); err != nil {
    fmt.Println(err.Error())
}else{
    fmt.Println(string(pid))
    processExit := exec.Command("/bin/sh", "-c",`kill `+string(pid))
    if _, err := processExit.Output(); err != nil {
        fmt.Println(err.Error())
    }
}

and

// 传入查询的端口号
// 返回端口号对应的进程PID,若没有找到相关进程,返回-1
func portInUse(portNumber int) int {
    res := -1
    var outBytes bytes.Buffer
    cmdStr := fmt.Sprintf("netstat -ano -p tcp | findstr %d", portNumber)
    cmd := exec.Command("cmd", "/c", cmdStr)
    cmd.Stdout = &outBytes
    cmd.Run()
    resStr := outBytes.String()
    r := regexp.MustCompile(`\s\d+\s`).FindAllString(resStr, -1)
    if len(r) > 0 {
        pid, err := strconv.Atoi(strings.TrimSpace(r[0]))
        if err != nil {
            res = -1
        } else {
            res = pid
        }
    }
    return res
}

端口检测:

func ScanPort(protocol string, hostname string, port int) bool {
 fmt.Printf("scanning port %d \n", port)
 p := strconv.Itoa(port)
 addr := net.JoinHostPort(hostname, p)
 conn, err := net.DialTimeout(protocol, addr, 3*time.Second)
 if err != nil {
 return false
 }
 defer conn.Close()
 return true
}

参考博客:

https://www.jb51.net/article/208384.htm

免责声明:文章转载自《golang查找端口号占用的进程号》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇敏捷中的端到端测试在Ubuntu里面安装VS Code方法下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Scala从入门到精通之四-映射和元组

在Scala中映射之键值对的集合,元组是n个对象的聚集,但是对象的类型不一定相同 本节内容要点   Scala中映射的创建,遍历和查询   如何从可变和不可变映射中做出选择   Scala映射和Java映射见的互操作   Scala中元组的使用 一.构造映射 我们可以这样来构造一个映射: val scores = Map("ysl"->100,"...

SparkSQL学习笔记

概述冠状病毒来临,宅在家中给国家做贡献之际,写一篇随笔记录SparkSQL的学习笔记,目的有二,一是记录整理之前的知识作为备忘录,二是分享技术,大家共同进步,有问题也希望大家不吝赐教。总体而言,大数据主要包含三种操作:长时间运行的批量数据处理;交互式运行的数据查询;实时数据流处理。sparkSQL特点:数据兼容,不仅兼容hive,还可以从rdd,parqu...

Xmemcached集群与SpringBoot整合

创建SpringBoot项目xmemcached_springboot,添加开发需要的包名和类名,项目的目录结构如下: 添加XMemcached依赖: <dependency> <groupId>com.googlecode.xmemcached</groupId> &l...

数据词典与ABAP类型映射

数据词典与ABAP类型映射 这些不能够直接在ABAP程序中使用,但可以使用对它们进行包装后的Data element来间接使用,在程序中使用数据字典类型时,将转化为相应的ABAP内置类型。 Type 允许最大长度m Meaning ABAP Type ACCP 6 Accounting period n(6) CHAR 1-255 Char...

Delphi声明Record变量后直接初始化

 TARec = record    A1: string;    A2: string;  end;   TBRec = record    A1: string;    A2: string;    ARec: TARec;  end;   PAppWindow = ^TAppWindow;  TAppWindow = Record    Width,...

webMagic入门案例,启动流程,及从页面中获取元素,并放到Page对象中,并成功拿出

本例作用: 1)首次成功配置,了解软件运行机制2)从页面中获取元素三种方式 jsoup,xpath,css3) page.putField("subject","尝试存入结果项的内容,可从页面中获取值");4)page.getResultItems().get("subject") 从结果集中拿出数据5)List<String> links =...