//go:build !windows package pzserver import ( "os/exec" "syscall" ) // setProcessGroup просит ядро выделить процессу собственную группу: сервер PZ // это скрипт-обёртка, порождающая JVM, и убивать их нужно вместе. func setProcessGroup(cmd *exec.Cmd) { cmd.SysProcAttr = &syscall.SysProcAttr{Setpgid: true} } // processGroupID возвращает pgid запущенного процесса. func processGroupID(pid int) int { pgid, err := syscall.Getpgid(pid) if err != nil { return pid } return pgid } // signalGroup шлёт сигнал всей группе (отрицательный pid = группа). func signalGroup(pgid int, sig syscall.Signal) error { return syscall.Kill(-pgid, sig) } var ( sigTerm = syscall.SIGTERM sigKill = syscall.SIGKILL )