go语言 exec Command 执行长命令


go sdk 版本 1.11.4

1. 开启ping命令进程

2.获取ping命令进程对应的 pid

package main

import (
    "fmt"
    "io/ioutil"
    "os/exec"
)

func run() {
    cmd := exec.Command("/bin/sh", "-c", "ping 127.0.0.1")
    _, err := cmd.Output()
    if err != nil {
        panic(err.Error())
    }

    if err := cmd.Start(); err != nil {
        panic(err.Error())
    }

    if err := cmd.Wait(); err != nil {
        panic(err.Error())
    }
}

func main() {
    go run()

    cmd := exec.Command("/bin/sh", "-c", `ps -ef | grep -v "grep" | grep "ping" | awk '{print $2}'`)
    stdout, err := cmd.StdoutPipe()
    if err != nil {
        fmt.Println("StdoutPipe: " + err.Error())
        return
    }

    stderr, err := cmd.StderrPipe()
    if err != nil {
        fmt.Println("StderrPipe: ", err.Error())
        return
    }

    if err := cmd.Start(); err != nil {
        fmt.Println("Start: ", err.Error())
        return
    }

    bytesErr, err := ioutil.ReadAll(stderr)
    if err != nil {
        fmt.Println("ReadAll stderr: ", err.Error())
        return
    }

    if len(bytesErr) != 0 {
        fmt.Printf("stderr is not nil: %s", bytesErr)
        return
    }

    bytes, err := ioutil.ReadAll(stdout)
    if err != nil {
        fmt.Println("ReadAll stdout: ", err.Error())
        return
    }

    if err := cmd.Wait(); err != nil {
        fmt.Println("Wait: ", err.Error())
        return
    }

    fmt.Printf("stdout: pid = %s", bytes)
}

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM