在 Golang 中,可以使用 os/exec 包来启动一个进程,并使用 io.Pipe() 创建输入输出管道来与进程进行通信。然后使用 io.Copy() 将管道读写到进程标准输入和标准输出中。在这里,我们可以使用 io.Copy() 函数来监视进程的 IO:

package main

import (
    "io"
    "log"
    "os"
    "os/exec"
)

func main() {
    cmd := exec.Command("ls", "-l")
    stdout, err := cmd.StdoutPipe()
    if err != nil {
        log.Fatal(err)
    }
    stderr, err := cmd.StderrPipe()
    if err != nil {
        log.Fatal(err)
    }

    go func() {
        io.Copy(os.Stdout, stdout)
    }()
    go func() {
        io.Copy(os.Stderr, stderr)
    }()

    if err := cmd.Start(); err != nil {
        log.Fatal(err)
    }

    if err := cmd.Wait(); err != nil {
        log.Fatal(err)
    }
}

在这个例子中,我们使用 exec.Command() 函数来启动一个 ls -l 的进程。然后我们使用 cmd.StdoutPipe()cmd.StderrPipe() 函数来创建标准输出和标准错误管道。接着,我们使用 go 关键字来创建两个 goroutine 来监视标准输出和标准错误,并将它们复制到我们的控制台中。

最后,我们使用 cmd.Start() 函数来启动进程,并使用 cmd.Wait() 函数来等待进程完成。如果进程发生错误,我们将会输出错误并终止程序

golang 监视进程io

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

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