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()
|
||
}
|