22 lines
388 B
Go
22 lines
388 B
Go
|
|
//go:build !windows
|
|||
|
|
|
|||
|
|
package process
|
|||
|
|
|
|||
|
|
import (
|
|||
|
|
"os/exec"
|
|||
|
|
"syscall"
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
func killProcessGroup(c *exec.Cmd) error {
|
|||
|
|
if c.Process == nil {
|
|||
|
|
return nil
|
|||
|
|
}
|
|||
|
|
// 殺死整個 process group(負號表示 group)
|
|||
|
|
pgid, err := syscall.Getpgid(c.Process.Pid)
|
|||
|
|
if err == nil {
|
|||
|
|
_ = syscall.Kill(-pgid, syscall.SIGKILL)
|
|||
|
|
}
|
|||
|
|
// 同時也 kill 主程序,以防萬一
|
|||
|
|
return c.Process.Kill()
|
|||
|
|
}
|