mirror of
https://github.com/Ed1s0nZ/CyberStrikeAI.git
synced 2026-05-15 12:58:01 +02:00
32 lines
716 B
Go
32 lines
716 B
Go
//go:build !windows
|
|
|
|
package security
|
|
|
|
import (
|
|
"os/exec"
|
|
"syscall"
|
|
)
|
|
|
|
// prepareShellCmdSession 让 shell 子进程在独立会话中运行,便于超时/取消时整组 SIGKILL(含子进程)。
|
|
func prepareShellCmdSession(cmd *exec.Cmd) error {
|
|
if cmd == nil {
|
|
return nil
|
|
}
|
|
if cmd.SysProcAttr == nil {
|
|
cmd.SysProcAttr = &syscall.SysProcAttr{}
|
|
}
|
|
cmd.SysProcAttr.Setsid = true
|
|
return nil
|
|
}
|
|
|
|
// terminateCmdTree 尽力终止 cmd 及其进程组(Unix 下 Setsid 后 PGID == 首进程 PID)。
|
|
func terminateCmdTree(cmd *exec.Cmd) {
|
|
if cmd == nil || cmd.Process == nil {
|
|
return
|
|
}
|
|
pid := cmd.Process.Pid
|
|
if err := syscall.Kill(-pid, syscall.SIGKILL); err != nil {
|
|
_ = cmd.Process.Kill()
|
|
}
|
|
}
|