下方代码会执行 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)
}






网友评论