美文网首页
Go 运行linux命令并kill掉

Go 运行linux命令并kill掉

作者: Robin92 | 来源:发表于2023-03-15 18:30 被阅读0次

下方代码会执行 sngrep 抓包 1分钟,最后将其 kill -9.

  • 必须有 cmd.SysProcAttr = &syscall.SysProcAttr{Setpgid: true}
  • kill 时用负值 syscall.Kill(-cmd.Process.Pid, syscall.SIGKILL)
  • kill 之后如果没有 cmd.Wait() 会变为僵尸进程
  • 注意执行的时候是不是 sudo 执行的
  • 注意 syscall.Kill 只能在 linux 中执行
package main

import (
    "fmt"
    "os/exec"
    "syscall"
    "time"
)

func main() {
    cmd := exec.Command("sngrep", "-c", "-N", "-q", "-O", "file.pcap")
    cmd.SysProcAttr = &syscall.SysProcAttr{Setpgid: true}
    err := cmd.Start()
    if err != nil {
        fmt.Println("err:", err)
        return
    }
    fmt.Println("run pid ", cmd.Process.Pid)
    defer func() {
        if err = syscall.Kill(-cmd.Process.Pid, syscall.SIGKILL); err != nil {
            fmt.Println(fmt.Printf("Kill sngrep (%d) failed with err %s", cmd.Process.Pid, err.Error()))
        }
        cmd.Wait()
    }()

    time.Sleep(1 * time.Minute)
}

相关文章

网友评论

      本文标题:Go 运行linux命令并kill掉

      本文链接:https://www.haomeiwen.com/subject/fralrdtx.html